Algorithm

[백준] 10162 전자레인지 Python

도토오오리 2023. 8. 6. 23:32

https://www.acmicpc.net/problem/10162

 

10162번: 전자레인지

3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은

www.acmicpc.net

문제 설명: 요리시간 T(초)가 정수로 주어질때 버튼 각각 5분, 1분, 10초로 설정된 A,B,C 버튼을 최소로 누르는 횟수를 출력하는 문제이다. 

 

사실 처음에는 무작정 문제를 푸려고 while문과 if문을 남발(..)하여 풀긴 했다. 

#10162 전자레인지

T = int(input()) 

#버튼 A,B,C는 각각 5분, 1분, 10초 = 300초, 60초, 10초

a_count = 0
b_count = 0
c_count = 0

while T != 0:
    if (T % 10 != 0):
        break 
    elif (T >= 300):
        T -= 300
        a_count += 1
    elif (T >= 60 and T < 300): 
        T -= 60
        b_count += 1
    elif (T >= 10 and T < 60):
        T -= 10
        c_count += 1
    
if (T% 10 != 0):
    print(-1)
else:
    print(a_count, b_count, c_count)

100점으로 맞긴 했는데 내가 보기에도 좋은 코드가 아닌 것 같아 다른 방법을 고민해보았다.

 

아이디어: 그냥 A,B,C가 쓰인 횟수만 알면 되는 건데 이거는 T에서 각각 300, 60, 10을 나눠주면 구할 수 있는 간단한 문제였다. 변수를 0으로 초기화 한 다음 이를 T에서 각각 300, 60, 10으로 나눠주면 된다. 하지만 이때 주의해야 할 점은 A가 최대한 많이 눌리는게 최적해이기 때문에 A부터 누른다는 가정. 그리고 B는 A, C는 A와 B가 눌린 후 누르는 것이기 때문에 300, 60으로 나눈 나머지에 각각 60, 10을 나눠야 한다. 

#10162 전자레인지

T = int(input()) 

#버튼 A,B,C는 각각 300초, 60초, 10초

if (T% 10 != 0):
    print(-1)
else:
    A = B = C = 0
    A = T // 300
    B = (T % 300) // 60 
    C = (T % 300) % 60 // 10
    print(A,B,C)

 

그리디 알고리즘이 이런 유형의 문제가 많이 나오는 듯 하다. 근데 앞 코드는 내가 봐도 거지같네..