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)
그리디 알고리즘이 이런 유형의 문제가 많이 나오는 듯 하다. 근데 앞 코드는 내가 봐도 거지같네..