10162번: 전자레인지
3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은
www.acmicpc.net
📌 풀이
내가 (그나마) 좋아하는 시간 계산 문제 (자매품: 알람시계, 인공지능 시계, 오븐 시계)
첫째 줄에 요리 시간 T를 input으로 선언한다.
A, B, C는 5분, 1분, 10초인데 통일하기 위해서 모두 초 단위로 계산해준다. 300 / 60 / 10
A, B, C를 누른 횟수의 합이 항상 최소가 되어야 하기 때문에 큰 수 먼저 계산을 해준다.
예를 들어 T=100 일 때, B 1번 C 4번 하는 게 최소버튼 조작이다. (C를 10번 누르는 것보다)
버튼을 누르지 않을 경우는 0으로 출력되며, A, B, C로 맞출 수 없을 경우엔 -1을 출력해야 한다.
먼저 X, Y, Z로 A, B, C를 조금 변형해준다.
큰 수 먼저 해야 하니까 T를 A로 먼저 나눈 몫을 X로 하고, T를 A로 나눴을 때 나머지를 B로 나눈 걸 Y로 선언한다.
그리고 그렇게 나눴는데도 나머지가 있는 것을 C로 또 한 번 나눠준다.
T=300 일 때 X가 1이면 1 0 0 / T=500 일 때 X 1번 Y 3번 Z 2번 이런 식으로 계산이 된다.
참고로 A, B, C로 맞출 수 없을 때를 T % C != 0 으로 했는데 되더라.
전에는 아래와 같이 좀 복잡하게 적었는데, 아마 300/60/10 에서 이 10에서도 나눠지지 않으면 안되는 것 같다.
지금 300 60 10 이게 다 10의 단위로 떨어지니까 10으로도 안 나눠지면 -1이 출력되는 구조인듯...?
뭐라고 설명을 못하겠는데 아무튼 그렇다.
if T != ((A*X)+(B*Y)+(C*Z)) :
print(-1)
✅ 코드
T = int(input())
A = 300
B = 60
C = 10
X = (T//A)
Y = (T%A)//B
Z = ((T%A)%B)//C
if T % C != 0 :
print(-1)
else :
print(X, Y, Z)
'🥧 Python > ⚙️ 코딩테스트' 카테고리의 다른 글
[백준-Python] 10214번: Baseball (0) | 2023.03.01 |
---|---|
[백준-Python] 10103번: 주사위 게임 (0) | 2023.03.01 |
[백준-Python] 8958번: OX퀴즈 (0) | 2023.03.01 |
[백준-Python] 9610번: 사분면 (0) | 2023.02.24 |
[백준-Python] 5717번: 상근이의 친구들 (0) | 2023.02.24 |