코드업 3120 문제 풀이 python

코드업 3120 문제 링크

🐒 리모컨

컴퓨터실에서 수업 중인 정보 선생님은 냉난방기의 온도를 조절하려고 한다.

냉난방기가 멀리 있어서 리모컨으로 조작하려고 하는데, 리모컨의 온도 조절 버튼은 다음과 같다.

1) 온도를 1도 올리는 버튼

2) 온도를 1도 내리는 버튼

3) 온도를 5도 올리는 버튼

4) 온도를 5도 내리는 버튼

5) 온도를 10도 올리는 버튼

6) 온도를 10도 내리는 버튼

이와 같이 총 6개의 버튼으로 목표 온도를 조절해야 한다.

현재 설정 온도와 변경하고자하는 목표 온도가 주어지면 이 버튼들을 이용하여 목표 온도로 변경하고자 한다.

이 때 버튼 누름의 최소 횟수를 구하시오.

예를 들어, 7도에서 34도로 변경하는 경우,

7 -> 17 -> 27 -> 32 -> 33 -> 34

이렇게 총 5번 누르면 된다.

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

  • 최소한의 버튼 사용으로 목표온도가 되는 버튼의 횟수를 출력한다.

입력 예시

7 34

출력 예시

5

나의 풀이

a, b = map(int,input().split())

temp = abs(b - a)

count = 0
while temp != 0:
    settinglist = []
    for i in [10, 5, 1]: 
        x = temp - i
        settinglist.append(abs(x))
    temp = min(settinglist)
    
    count += 1

print(count)

장장 2시간 25분이 걸린 문제풀이..
뭔가 풀릴 것 같은데 안풀려서 오기가 생겼다
원래 안풀리는 문제 계속 잡고있는거 안좋다고 그러던데 😹

처음에는 거스름돈 문제처럼 값을 10, 5, 1 순으로 나누면서 카운트를 세는 방법을 생각했지만 문제가 발생했다. (여기까지가 풀기 시작한지 15분 쯤이었다 ㅋㅋㅋ)

예를 들어, 10 에서 6까지 가려면
-1 을 네번할 수도 있지만
-5+1 을 하면 두번에 끝나게 된다.
위 방법에서는 후자의 계산은 하지 못한다.

그래서 절대값을 사용해야겠다는 아이디어를 떠올렸고,
구글링해서 절댓값 함수인 abs()함수를 찾았다. (내장함수였더라)

a, b = map(int,input().split())

temp = abs(b - a) 	#입력된 두 값 사이의 거리를 temp에 저장

count = 0			#리모컨 조작 횟수
while temp != 0: 	#두 값의 거리가 0이 될 때까지 반복
    settinglist = [] 
    for i in [10, 5, 1]: #거리를 구하고있으니 양수버튼 하나씩만 쓴다
        x = temp - i 	# 조작하고나서의 위치를 x에 저장
        settinglist.append(abs(x)) 	# x의 절댓값 추가
    temp = min(settinglist) #거리가 가장 짧은 요소를 temp에 대입
    
    count += 1

print(count)

min함수로 거리가 가장 짧은 요소들만 선택하다가 거리가 0이 되면 반복문을 종료하게된다.

어떻게 풀었는지 정리할려고 쓰고있는데 이 쯤 되니 대략 정신이 멍해진다..

나중에 다시 한번 풀어봐야겠다.

좋은 웹페이지 즐겨찾기