https://www.acmicpc.net/problem/10162
10162번: 전자레인지
3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은
www.acmicpc.net
문제 해석
T초를 입력하면, 가능한 한 적은 버튼 입력 횟수를 출력한다.
버튼은 5분, 1분, 10초 버튼이 있으며, 3개의 버튼으로 T초를 맞출 수 없으면 -1을 출력한다.
코드
def time(second):
if second % 10 != 0:
print(-1)
else:
divide(second)
def divide(time):
five_min = 0
one_min = 0
ten_sec = 0
while time != 0:
if time - 300 >= 0:
time -= 300; five_min += 1
elif time - 60 >= 0:
time -= 60; one_min += 1
elif time - 10 >= 0:
time -= 10; ten_sec +=1
print(f"{five_min} {one_min} {ten_sec}")
a = int(input()) # 시간 입력
time(a)
문제 풀이
divide 함수를 보자.
처음에 five_min, one_min, ten_sec 함수의 경우 0으로 초기화를 시킨다.
이후 버튼을 가능한 한 적은 수로 누르고 나누어 떨어지도록 하기 위해서는 가장 큰 단위부터 눌러야 한다.
(그리디 알고리즘의 대표적인 예로, 비슷한 문제로는 거스름돈 동전 문제 등이 있다.)
5분, 1분을 초로 변환해 준 후 시간을 빼주고, 조건에 맞추어 출력해준다.
다음으로 time 함수를 보자.
시간은 10초 단위로 나누어 떨어질 수 있으므로 0으로 나누어 지지 않으면 -1을 출력하고,
0으로 나누어 떨어진다면 divide 함수를 호출해 출력해 준다.
'백준' 카테고리의 다른 글
[BOJ/python] 11729번 하노이 탑 이동 순서 (0) | 2022.06.19 |
---|---|
[BOJ/python] 25186번 INFP 두람 (0) | 2022.06.06 |
[BOJ/python] 23972번 악마의 제안 (0) | 2022.03.27 |
[BOJ/python] 4740번 거울, 오! 거울 (0) | 2022.03.20 |
[BOJ/python] 18409번 막대기 (0) | 2022.03.20 |