[백준 19940번-파이썬/Python] 피자 오븐
알고리즘 공부/BOJ백준 풀이

[백준 19940번-파이썬/Python] 피자 오븐

http://acmicpc.net/problem/19940

 

 

{코드}

for _ in range(int(input())):
    n = int(input())
    buttons = [0]*5
    sixties, tens, ones = n//60, (n % 60)//10, n % 10

    if ones > 5:
        tens += 1
        ones -= 10
    if tens > 3:
        sixties += 1
        tens -= 6
    if tens < 0 and ones == 5:
        tens += 1
        ones -= 10

    buttons[0] = sixties
    buttons[2-(tens >= 0)] = abs(tens)
    buttons[4-(ones >= 0)] = abs(ones)
    print(*buttons)

{설명}

먼저 각 버튼을 누를 횟수를 저장할 buttons 리스트를 만든다. [60, 10, -10, 1, -1] 순서 

그리고 주어진 수를 60, 10, 1이 각각 몇 개 필요한지 구한다. (최적화를 떠나서 기초값을 구하는 것) * 10의 자리 수는 6보다 작음

만약 일의 자리가 5보다 크다면 10을 더한 후 필요한 만큼 1의 자리를 빼는 것이 더 효율적이고 사전 순으로 앞선다.

만약 10의 자리가 3보다 크다면 60을 더한 후 10의 자리를 빼는 것이 더 효율적이고 사전순으로 앞선다.

일의 자리가 5인 경우 35와 55의 경우만 주의하면 된다.

35의 경우 3*10 + 5*1이며 55의 경우 1*60 - 5*1이다.

만약 첫번째 조건문에서 ones >= 5로 확인한다면 35의 경우에서 1*60 - 2*10 - 5*1이 되어 정답이 아니게 된다.

그렇기에 따로 조건문을 만들고 0~30대의 수는 일의 자리가 5인 경우 더하는 것이 더 효율적이기 때문에 이전 조건문에서 10의 자리가 6이 빠진, 즉 10의 자리가 3을 초과하는 수들만 해당 조건문에 들어오게 한다.

이제 답을 다 구했으므로 buttons 리스트에 넣기만 하면 된다.

이때, 더하는 버튼과 빼는 버튼은 인덱스가 1 차이므로 조건문을 사용해 맞는 인덱스에 들어가게 한다. (True는 1, False는 0의 값을 가짐)