백준 - 10162번 전자레인지 python 문제풀이 [Hellfer]
https://www.acmicpc.net/problem/10162
10162번: 전자레인지
3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은
www.acmicpc.net
🔷 알고리즘 분류 - 수학, 구현, 그리디 알고리즘
난이도 - 브론즈 3
그리디 알고리즘(Greedy Algorithm)은 매 순간 최적이라고 생각되는 결정을 하는 방식으로 문제를 해결하는 알고리즘입니다.
이 때문에 그리디 알고리즘은 '탐욕적'이라는 뜻의 '그리디'라는 이름이 붙었습니다.
그리디 알고리즘이 작동하는 기본 원리는 간단합니다. 매 순간 최선의 선택을 하면서 전체 문제의 해결책을 찾아나갑니다.
이 때문에 그리디 알고리즘은 많은 종류의 최적화 문제에 효율적으로 사용될 수 있습니다.
그러나 그리디 알고리즘은 '항상 최적의 해결책을 보장하는가?'라는 중요한 질문에 대한 답이 '아니요'일 수 있다는 점에서 주의할 필요가 있습니다.
그리디 알고리즘은 그 자체로 국소적인 최적해를 찾는 데는 탁월하지만, 이가 반드시 전체적인 최적해를 보장하진 않습니다.
🔶문제 풀이 - 그리디 알고리즘을 이용한 풀이
T = int(input())
# 각 버튼 A, B, C에 대한 카운트를 저장할 리스트를 초기화합니다.
count = [0, 0, 0]
# 만약 T가 10으로 나누어 떨어지지 않는다면, -1을 출력하고 프로그램을 종료합니다.
# 왜냐하면, C 버튼으로도 만들 수 없는 시간이기 때문입니다.
if T % 10 != 0:
print(-1)
else:
# A 버튼으로 나누어 떨어지는 만큼 나눕니다.
count[0] = T // 300
T %= 300
# B 버튼으로 나누어 떨어지는 만큼 나눕니다.
count[1] = T // 60
T %= 60
# C 버튼으로 나누어 떨어지는 만큼 나눕니다.
count[2] = T // 10
# 각 버튼의 카운트를 공백으로 구분하여 출력합니다.
print(" ".join(map(str, count)))
🔶문제 이해하기
아래와 같이 입력값이 주어졌다고 가정해 보겠습니다.
100
1. T가 10으로 나누어 떨어지므로 if문이 아닌 else문을 수행합니다,
2. T가 300으로 나누어 떨어지지 않으므로 count [0]인 A버튼은 0이 됩니다.
3. T(=100)가 60으로 나누어 떨어지므로 count [1]인 B버튼은 1이 됩니다. T값은 40이 됩니다.
4. T(=40)가 10으로 나누어 떨어지므로 count [2]인 C버튼은 4가 됩니다.
5. 아래와 같이 출력값을 출력하고 종료됩니다.
0 1 4
🤗파이팅입니다~ 여러분!!🤗