백준

[BOJ/python] 10162번 전자레인지

LUNAV 2022. 5. 16. 23:37

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 함수를 호출해 출력해 준다.