본문 바로가기

Algorithm/Baekjoon

Baekjoon #10162 - 전자레인지

목차

1. 문제

2. 입출력 예시

3. 문제 풀이

1. 문제

2. 입출력 예시

입력 예시 출력 예시
100 0 1 4
189 -1

3. 문제 풀이

이 문제의 유형은 거스름돈과 동일했으며 딕셔너리를 사용하여 간단히 해결할 수 있었다. 문제를 해결하기 위한 순서는 아래와 같다.

  • 딕셔너리(btn)의 각각 key를 버튼으로 하고 value를 0으로 초기화한다. 이때 각각 버튼은 모두 초 단위로 바꾸어주며, 초 단위가 큰 순으로 key에 저장한다.
  • 냉동식품의 요리시간(T)를 입력받는다.
  • 딕셔너리의 key를 기준으로 반복하며 해당 keyvalue를 요리시간에 버튼의 초로 나눈 몫으로 변경하되 정수형이 아닌 문자열(str)로 변환한다. 이후 요리시간은 요리시간을 버튼의 초로 나눈 나머지로 초기화한다.
  • 반복이 종료된 후 요리시간의 값을 확인한다. 만약에 요리시간이 0이 아닐 경우 -1을 출력하고, 그 외에는 딕셔너리의 value들 사이에 공백을 두어 문자열로 출력한다.

이를 코드로 나타내면 아래와 같다.

import sys


btn = {
    300: 0,
    60: 0,
    10: 0
}

T = int(sys.stdin.readline())

for b in btn.keys():
    btn[b] = str(T//b)
    T %= btn

if T:
    print(-1)

else:
    print(" ".join(list(btn.values())))

이 코드의 메모리는 28,776 KB, 시간은 72 ms 가 소요되었다. 이와 같은 문제의 유형은 이제 제대로 파악한 것으로 생각된다. 문제에서 제시한 동작의 최솟값을 구하는 경우 가장 큰 순으로 주어진 값을 나누고, 그 몫을 결과에 더하고, 주어진 값은 나머지로 초기화하는 것이 핵심이다.

'Algorithm > Baekjoon' 카테고리의 다른 글

Baekjoon #4796 - 캠핑  (0) 2021.03.25
Baekjoon #1339 - 단어 수학  (0) 2021.03.24
Baekjoon #1946번 - 신입 사원  (0) 2021.03.23
Baekjoon - #2217 - 로프  (0) 2021.03.23
Baekjoon #1541 - 잃어버린 괄호  (0) 2021.03.22