Algorithm Study/Python

[코드업 파이썬] # 3120 리모컨

728x90
반응형

코드업 그리디 문제

# 3120 리모컨

링크 : https://codeup.kr/problem.php?id=3120&rid=0

 

리모컨

현재 온도a 와 목표 온도b가 입력된다. ( 0 <= a , b <= 40 )

codeup.kr

 

풀이

a, b = map(int, input().split())
df = [10, 5, 1]

diff = abs(b-a)
cnt = 0
    
if diff%10 in [9, 8]: 
    diff_with_a = 10 - diff%10
    diff_s = diff + diff_with_a
    
    for i in range(3):    
        cnt += diff_s // df[i]
        diff_s = diff_s % df[i]
    
    cnt += diff_with_a
                
elif diff%10 == 4:
    diff_with_a = 5 - diff%5
    diff_s = diff + diff_with_a
    
    for i in range(3):
        cnt += diff_s // df[i]
        diff_s = diff_s % df[i]
    
    cnt += diff_with_a

else:
    for i in range(3):
        cnt += diff // df[i]
        diff = diff % df[i]
        
print(cnt)

# time : 1.08 (3 22 입력 기준)

 

풀이 후기

  • 문제에 주어진 모든 조건을 활용할 필요는 없다
    • 양수와 음수 버튼을 df으로 정의하는 방식을 시도할까 해봤으나 사용되지 않는 데이터가 포함되어있어 삭제하였다(df의 음수버튼 목록)
  • 정답부터 맞춰보고 코드를 개선해보자
    • 점점 시간과 메모리 제한이 있는 문제를 자주 마주치게 되는 것 같다. 정답으로 채점돼도 필요없는 코드가 있는지, 시간복잡도는 어떤지, 개선할 여지가 있는지 확인해보는 습관을 기르자