![[백준] python 2884번: 알람 시계 [백준] python 2884번: 알람 시계](http://t1.daumcdn.net/tistory_admin/static/images/xBoxReplace_250.png)
2884번: 알람 시계
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,...
www.acmicpc.net
무려 6번을 틀리고 7번째에 성공한 문제
칠전팔기 할 뻔 했는데 아쉽구만..(?)
입력값을 받고,
H,M = map(int,input().split())
다중 if를 사용하여
1) 시간과 분이 true값을 갖도록 설정 (0<=H<=23, 0<=M<=59)
- 입력된 값보다 45분 빠른 M을 얻기
if 0 <= H <= 23 and 0 <= M <= 59:
M = M - 45
2) 45분 빠른 M값에 대하여
(1) M이 0보다 작다면 H는 1시간 줄어들어야 함
(2) M을 음수값 만큼 60분에서 더하여, 적절한 시간값을 갖는 M을 도출(60 내에서)
ex) 45분 빠른 m값이 -15라면, 60분에서 -15를 더해주면 45분이라는 값이 나옴
if M < 0:
H = H - 1
M = 60 + M
3) 2번의 값을 도출했을 때, H가 0보다 작다면
- 역시 24시간에서 음수값을 더해서 적절한 H값 도출
if H < 0:
H = 24 + H
4) 값 출력
print(H, M)
그리하여 정답은
H,M = map(int,input().split())
if 0 <= H <= 23 and 0 <= M <= 59:
M = M - 45
if M < 0:
H = H - 1
M = 60 + M
if H < 0:
H = 24 + H
print(H, M)
#아래 코드는 최초 시도한 것
H = int(input())
M = int(input())
FM = FH = 0
if 0 <= H <= 23 and 0 <= M <= 59:
FM = M - 45
if FM > 0:
FH = H
else:
FH = H - 1
FM = 60 + FM
if FH < 0:
FH = 24 + FH
print(FH, FM)
제일 처음에 제출한 것.
일단 문제에서 요구하는 "한 줄에 입력함"을 처리하지 않았기에 해당 부분 수정했고,
0으로 초기화한 fm,fh변수에 넣어 계산을 했는데
여러 번 시도하다 보니 굳이 변수 설정 없이 바로 입력값으로 계산하여 h,m을 결과로 내는 것이
더 간편하고 깔끔하다는 해답을 얻을 수 있었다. (변수 설정은 괜한 수고를 하는 것이었다.)
그리고 가장 큰 문제였던
fm이 0보다 큰 부분. (m이 0보다 클 경우)
0보다 큰 경우를 굳이 설정하지 않아도,
0보다 작은 경우만 if로 설정한다면
'그 외의 값'은 알아서 m= m-45로 처리되므로
없어도 되는 부분이었다.
이걸 알아내기까지 시도했던 몇 가지 코드를 남긴다.(다 오답임)
H,M = map(int,input().split())
FM = FH = 0
if 0 <= H <= 23 and 0 <= M <= 59:
FM = M - 45
if FM > 0:
FH = H
else:
FH = H - 1
FM = 60 + FM
if FH < 0:
FH = 24 + FH
print(FH, FM)
H,M = map(int,input().split())
FM = FH = 0
if 0 <= H <= 23 and 0 <= M <= 59:
FM = M - 45
if FM < 0:
FH = H - 1
FM = 60 + FM
if FH < 0:
FH = 24 + FH
print(FH, FM)
쓸데없이 if를 집어넣고 한 줄로 처리를 하고 고군분투 했던 현장..
이렇게 모아두고 보니 최종 결과물이 훨씬 합리적이고 깔끔하다.
'python > 연습문제 풀이' 카테고리의 다른 글
[백준] python 10950 : A+B -3 (0) | 2022.10.24 |
---|---|
[백준] python 10807 : 개수 세기 (0) | 2022.10.24 |
[백준] python 3003번 (0) | 2022.10.18 |
[백준] python 10430번 (0) | 2022.10.18 |
(연습문제) 사용자 정의 class (2) | 2022.09.30 |
댓글