-
[파이썬/Python] 백준 2884번(알람 시계) 단계별로 풀어보기깜빡의 취미/파이썬을 합니다. 2021. 8. 22. 18:34728x90
문제는 아래와 같다.
# 필요한 지식
1. if문 기본: 앞선 단계별로 풀어보기를 통해 이미 if문에 대해서는 이해하고 있을 테니 넘어간다.
2. 문자열 포맷팅: 입력된 값에 따라 45분을 빼고 이를 제시하기 위해서는 print문 안에 들어가는 문장이 입력값에 따라 달라져야 한다. 따라서 문자열 포맷팅이라는 녀석을 이용해 본다.
이 글에서는 f와 { }를 활용하는 간단한 방법을 소개한다.
>>> a = int(input()) 34 >>> print(f'{a+45}개 입력되었습니다.') 79개 입력되었습니다.
위의 예시와 같이 따옴표 앞에 f라는 문자를(format이라고 이해하면 된다) 입력하고, 상황에 따라 변하게 하고 싶은 부분을 {}(중괄호)로 감싼다. 숫자의 경우, 자동으로 계산된 수가 출력값에 반영된다.
# 답안 예시
이제 바쁜 현대인들을 위해 빠르게 답안 예시 두 개를 제시한다.
[답안 예시1] H, M = map(int, input().split()) if M >= 45: print(f'{H} {M-45}') elif H > 0 and M < 45: print(f'{H-1} {15+M}') elif H == 0 and M < 45: print(f'23 {15+M}') else: pass
[답안 예시2] H,M = map(int, input().split()) A = H*60 + M -45 B = A // 60 C = A % 60 if H == 0 and M < 45: print(f'23 {C}') else: print(f'{B} {C}')
# 답안 예시 1 세부 설명
시와 분을 H와 M이라 가정해보자. 45분을 뺀다는 건 단순히 M-45를 의미하지 않는다. 아래와 같이 생각해 보자.
1. M이 45보다 큰 경우
이 경우에는 특수하게 45분을 뺀다는 것이 M-45가 된다. H에 영향을 미치지 않으니 더 깊게 생각하지 않아도 좋다.
2. M이 45보다 작은 경우
2.1.1 M이 45보다 작고 H가 1 이상인 경우
45분을 뺀다는 것은 이 경우 우선 H-1을 의미한다. H가 하나 줄었다면 M에는 60이라는 숫자가 더해진다. 따라서 분의 경우 60 - 45 + M = M + 15가 된다.
+) 분에 대한 설명은 아래의 예시를 보면 더 쉽게 이해할 수 있다.
ex. 14시 15분 - 45분 = 13(14-1)시 30분(15 + 60 - 45 = 15 + 15)
ex2. 13시 30분 + 45분 = 14시 15분2.1.2 M이 45보다 작고 H가 0인 경우
마지막으로 고려해야 할 것은 H가 0일 경우인데, H-1이 성립하지 않기 때문이다. 자정이 0시, 그 바로 직전이 23시라고 문제에서 밝혔으므로 이 경우 H는 확정적으로 23이다. M만 2.1.1과 동일한 메커니즘을 적용하여 M+15로 이해하면 된다.
각각의 문장을 if문, 그리고 elif문으로 엮어 주면 답안 예시1, 완성이다.
# 답안 예시 2 세부 설명
답안 예시2는 시와 분을 굳이 구분하며 계산하지 않아도 된다는 데 집중했다. 우선 시를 분으로 변환하고, 45를 뺀다. 아래와 같이 말이다.
ex. 14시 15분 = (0시 0분을 기준으로) 14*60 + 15분 지난 상태 = 855분
그 후 45분을 뺀다.
ex. 855분 - 45분 = 810분
이렇게 나온 수를 60으로 나누었을 때 몫은 시가 되고, 나머지는 분이 될 것이다. 이때 나오는 값은 원하던 결과값이 맞으므로, 다시 시와 분으로 표현해 주기만 하면 된다. 이 경우 M이 45보다 작은 경우에도 알아서 몫이 줄어들기 때문에, 답안 예시1보다 짧은 사고 과정을 통해 문제를 풀 수 있다.
ex. 810 / 60 -> 몫 13, 나머지 30
다만 H가 0이고 M이 45보다 작으면 시(H)로 -1을 반환하기 때문에, 이 경우에만 H를 23으로 고정해주면, 답안 예시2 완성이다.
# 도움이 되는 글이었다면 좋겠습니다. 구독과 공감이 큰 도움이 됩니다! 물론, 방문만으로도 이미 감사합니다~! 즐거운 하루 되세요!
'깜빡의 취미 > 파이썬을 합니다.' 카테고리의 다른 글
[파이썬/Python] 백준 2739번(구구단) 단계별로 풀어보기+ [범위 넘어갈 때 오류 만들기 + 구구단 그 너머를 위한 식] (0) 2021.08.29 [파이썬/Python] for문 기본, 그리고 range 함수 (3) 2021.08.29 [파이썬/Python] 백준 14681번(사분면 고르기) 단계별로 풀어보기+ [점점 짧아지는 답안 예시 3개] (0) 2021.08.15 [파이썬/Python] 백준 2753번(윤년) 단계별로 풀어보기+ [2월 29일 생일 챙기기] (0) 2021.08.08 [파이썬/Python] 백준 9498번(시험 성적) 단계별로 풀어보기+ [밑으로 갈수록 쉬워지는 답안 3개 모음] (0) 2021.08.01