Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[백준-Python] 10162번: 전자레인지 본문

🥧 Python/⚙️ 코딩테스트

[백준-Python] 10162번: 전자레인지

썸머몽 2023. 3. 1. 01:17
728x90
 

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)
728x90