728x90
반응형
BaekJoon BOJ 백준 10162 전자레인지 문제는 전자레인지에 달린 3개의 버튼을 적절히 눌러서 그 시간의 합이 정확히 T초가 되도록 최소 버튼 조작을 구하는 문제이다.
BaekJoon 10162 전자레인지 문제 정보
출처
- https://www.acmicpc.net/problem/10162
알고리즘 분류
- 그리디 알고리즘 (greedy algorithm, 탐욕법)
난이도
- 브론즈 3 / Bronze 3
전자레인지 문제 요약
- 전자레인지에 달린 버튼 A, B, C에 지정된 시간은 각각 5분, 1분, 10초이다.
- 해당 버튼을 한번 누를 때마다 그 시간이 동작 시간에 더해진다.
- A, B, C 3개의 버튼을 적절히 눌러서 그 시간의 합이 정확히 T초가 되도록 해야 한다.
- 3개의 버튼으로 시간을 정확히 맞출 수 없는 경우도 있다.
- A, B, C를 누른 횟수의 합은 항상 최소가 되어야 한다. 이것을 최소 버튼 조작이라고 한다.
- 첫째 줄에 요리시간 T(초)가 정수로 주어져 있으며 그 범위는 1 ≤ T ≤ 10,000이다.
- 주어진 요리시간 T초를 맞추기 위한 최소 버튼 조작의 A B C 횟수를 사이에는 빈칸을 두어 차례대로 출력한다.
- 해당 버튼을 누르지 않는 경우에는 숫자 0을 출력해야 한다.
- 만일 제시된 3개의 버튼으로 T초를 맞출 수 없으면 음수 -1을 첫 줄에 출력해야 한다.
문제 풀이 과정
최소 버튼 조작을 하려면 동작 시간이 긴 버튼부터 최대한 많이 누르면 된다.
그리디 알고리즘이 정당한 이유는 동작 시간이 짧은 버튼들이 긴 버튼들의 배수이기 때문이다.
- 동전의 종류 수 N, 만들 가치의 합 K, 동전의 가치 A를 입력받는다.
- 각 버튼의 동작 시간이 초단위로 되어있는 리스트를 정의한다.
- 요리시간이 10초의 배수가 아니라면 3개의 버튼으로 초를 맞출 수 없으므로 -1을 출력한다.
- 10초의 배수면 동작 시간이 긴 버튼부터 최대한 많이 누르고
- 남은 시간을 요리시간에 덮어 씌운다.
- 모든 버튼을 다 누를 때까지 반복한다.
- 조건에 맞게 출력한다.
코드 및 설명
- T - 요리시간
- button - 각 버튼의 동작 시간이 초단위로 되어있는 리스트
- cnt - 버튼을 누른 횟수를 저장한 리스트 (A, B, C 순서)
T = int(input())
button = [300, 60, 10]
if T % 10 != 0:
print(-1)
else:
# 방법 1
cnt = []
for b in button:
cnt.append(T // b)
T %= b
print(*cnt)
# 방법 2
# for b in button:
# print(T // b, end=' ')
# T %= b
비슷한 문제 풀어보기 >>
[그리디/Greedy] 이코테 거스름 돈 문제 (Python / 파이썬)
[BOJ/BaekJoon] 백준 11047 동전 0 (Python / 파이썬)
BaekJoon 백준 BOJ 10162 전자레인지 문제를 파이썬 python으로 풀어보았다. 난이도는 Bronze 브론즈 3이다.
728x90
반응형
'Algorithm Problem Solving > BaekJoon' 카테고리의 다른 글
[BOJ/BaekJoon] 백준 1789 수들의 합 (Python / 파이썬) (0) | 2022.06.07 |
---|---|
[BOJ/BaekJoon] 백준 2217 로프 (Python / 파이썬) (0) | 2022.06.06 |
[BOJ/BaekJoon] 백준 1026 보물 (Python / 파이썬) (0) | 2022.06.06 |
[BOJ/BaekJoon] 백준 11047 동전 0 (Python / 파이썬) (0) | 2022.06.05 |
[BOJ/BaekJoon] 백준 11399 ATM (Python / 파이썬) (0) | 2022.06.05 |
댓글