[codeup] 3120 : 리모컨

SUNGJIN KIM·2022년 9월 4일
0

CODEUP

목록 보기
63/76
post-thumbnail

문제

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

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

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

문제 풀이

진짜 오래걸린 것 같다.
일단 시간을 단축하기 위해서는 가장 높은 온도부터 숫자를 줄여나갈 필요가 있다고 생각했다.

문제 풀이이 중점에 두었던 부분은 아래와 같다.

  1. 10의 단위가 넘어가는 경우 먼저 count 해준다.
  2. 온도 1(+-)의 횟수를 최소화 시켜준다.

해당 부분을 풀기 전에 많은 예시를 거쳤다.

case 1. 22 40 인 경우
1) 40-22 = 18

  • 1번 누르고 (+10)
  • 1번 누르고(+5)
  • 3번 누름 (+1,+1,+1)

= 총 5번 누르게 됨

2) 40-22 = 18

  • 2번 누르고(+10,+10)
  • 2번 누르고(-1, -1)

= 총 4번 누르게 됨

case 2. 8 13 인 경우
1) 13- 8 = 5

  • 1번 누름 (+5)

= 총 1번 누르게 됨

case 3. 7 34 인 경우
1) 34 - 7 = 27

  • 2번 누름 ( +10, +10)
  • 1번 누름 (+5)
  • 2번 누름 (+1, +1)

= 총 5번 누름

2) 34 - 7 = 27

  • 3번 누름 (+10,+10,+10)
  • 3번 누름 (-1,-1,-1)

= 총 6번 누름

이를 미루어봤을 때 생각한 것은 아래와 같다.

10의 단위의 나머지가 0~9가 되는데,
10의 단위의 나머지가 5보다 큰 경우, 5보다 작은 경우, 5인 경우
이렇게 3가지로 먼저 조건을 만들고

케이스를 미루어보았을때, 5의 단위로 나머지를 구했을때

  • 1~2인 경우에는 온도를 올리는 것이 최소 횟수가 됨
  • 3~4인 경우에는 온도를 내리는 것이 최소 횟수가 됨

이걸 바탕으로 코드를 구현하였다.
이렇게 구하는게 효율적인지는 모르겠으나, 도저히.. 더 좋은 답이 나오질 않는다.

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

count = 0

degree = abs(b-a)
count = degree // 10 # 10 단위 추가하기
last_degree = degree % 10

if last_degree > 5:
    if last_degree%5 >= 3:
    # 큰 수에서 빼주는 방식으로 진행
        count += 1 # 10단위에서 빼주는 것으로 이해하면 됨
        count += 5 - (last_degree%5)
    elif last_degree%5 < 3:
        count += 1 # 5단위 더해주는 것으로 진행
        count += (last_degree%5) # 숫자대로 더해주면 됨
elif last_degree == 5:
    # 5인 경우에는 온도 1번만 올리기/내리기 하면 됨
    count += 1
elif last_degree < 5:
    if last_degree%5 >= 3:
    # 큰 수에서 빼주는 방식으로 진행
        count += 1
        count += 5 - (last_degree%5)
    elif last_degree%5 < 3:
        count+= (last_degree%5)

print(count)

각각의 조건을 쭉 만들어주면 전체 케이스를 통과하게 된다.
생각보다 시간이 무지막지하게 오래걸렸다... 아오..

profile
#QA #woonmong

0개의 댓글