백준 10162번은 전자레인지 문제입니다.
A(5분), B(1분), C(10초)로 된 버튼을 최소한 몇 번 눌러야 하는지를 출력하는 문제입니다.
<코드>
T = int(input())
A = T // 300
B = T % 300 // 60
C = T % 300 % 60
C1 = C % 10
C2 = C // 10
if C1 == 0:
print(A, B, C2)
elif C1 != 0:
print(-1)
(1)
T를 int(input())으로 정수형 입력받습니다.
-
최소 횟수,,, 생각이 많아지긴 했지만 쉽게 풀 수 있는 문제입니다.
T를 10초 - 1분(60초) - 5분(300초) 순서대로 나눠서 횟수를 출력하기 보다는
5분(300초) - 1분(60초) - 10초, 즉 줄어드는 순서대로 나눠서 횟수를 출력하면 출력 횟수가 최소가 될 거라고 생각했어요.
'전자레인지 시간' 문제지만,
'지폐, 동전 계산' 문제와 거의 비슷하다고 볼 수 있죠.
우선 T의 단위는 '초'이므로
1분과 5분을 60초와 300초로 생각해줍니다.
(2) (3) (4) (5) (6)
// 산술 연산자를 이용하면 '횟수'
% 산술 연산자를 이용하면 '처리해야 하는 남은 시간'
A = T // 300
를 이용해서 T를 300으로 나눈 몫을 구하면,
그 몫이 A(5분, 300초)를 누르는 횟수가 됩니다.
예를 들어 500초(T)를 눌러야 한다고 할 때,
먼저 300초(5분)를 1회 누릅니다.
500(T) // 300 = 1
B = T % 300 // 60
% 산술 연산자를 이용해서 T(500)를 300으로 나눈 나머지를 구하면 200인데,
300초(5분)을 1회 누르고 남은 200초에 해당하는 값입니다.
[나머지값(T%300)을 처리해준다고 이해하면 됩니다]
그리고 200초에 해당하는 값으로 60으로 나눈 몫을 구하면,
1분(60초)를 누르는 횟수(3회)가 나오겠죠!
C = T % 300 % 60
C1 = C % 10
C2 = C // 10
C는 경우를 나눠서 접근해야 합니다.
T가 5분(300초), 1분(60초), 10초 버튼을 눌러서 나누어 떨어진다면
A, B, C 버튼을 누르는 횟수를 각각 출력하면 됩니다.
그러나 T가 5분(300초), 1분(60초), 10초 버튼을 눌러서 나누어 떨어지지 않는다면
-1을 출력해야 합니다.
if C1 == 0:
print(A, B, C2)
elif C1 != 0:
print(-1)
C1은 C를 10으로 나눈 나머지,
C2는 C를 10으로 나눈 몫입니다.
'나누어 떨어진다'는 '나머지가 0이다.'
'나누어 떨어지지 않는다'는 '나머지가 0이 아니다.'
라고 볼 수 있으므로,
C1이 0이 될 때는 횟수를 출력해주고,
0이 아닐 때는 -1을 출력합니다.
이때, C1이 0이 될 때 출력할 버튼 C의 횟수는 C2(몫)가 되어야 함을 유의하세요!
코린이 대학생의 풀이였습니다.
풀이에 오류가 있거나 빈약한 부분이 있다면 얼마든지 댓글 남겨주시기 바랍니다.
https://like-a-happy-cat.tistory.com/
https://blog.naver.com/snake6862
'프로그래밍 > 백준' 카테고리의 다른 글
[파이썬(Python)] 백준 10214 Baseball (0) | 2021.10.10 |
---|---|
[파이썬(Python)] 백준 2855번 주사위 게임 (0) | 2021.10.10 |
[파이썬(Python)] 백준 2163번 초콜릿 자르기 (0) | 2021.10.07 |
[파이썬(Python)] 백준 3046번 R2 : 평균을 활용한 추론 (0) | 2021.10.07 |
[파이썬(Python)] 백준 2588번 곱셈 : 세자리수 곱셈 (1) | 2021.10.07 |