티스토리 뷰
Python] 백준 알고리즘 온라인 저지 2884번 : 알람 시계
Python3 코드
H, M = map(int, input().split())
if M < 45 : # 분단위가 45분보다 작을 때
if H == 0 : # 0 시이면
H = 23
M += 60
else : # 0시가 아니면 (0시보다 크면)
H -= 1
M += 60
print(H, M-45)
Python3 코드 풀이
1. 코드 풀이의 전체적인 내용 정리
이 문제는 랜덤으로 H시 M분의 시간을 입력받으면 그 시간의 45분 이전의 시간을 출력하는 문제이다. 시간은 하루가 24시간, 1시간이 60분이라는 범위 안에서만 돌아간다. 이 시간은 문제에서도 나와있듯이 0:0(자정)을 시작으로 해서 끝은 23:59(다음날 자정 1분 전)이다.
시간에서 45분을 빼줄 때에는 단순히 입력받은 H시 M분에서 45를 빼주면 되는 경우가 있고 그렇지 않은 경우가 있다. 이러한 점을 주의해서 문제를 풀었다.
2. 코드 첫째줄, H와 M을 입력 받는다.
H, M = map(int, input().split())
입력받은 두 개의 수를 H, M 변수에 선언하였다. 이때 먼저 받는 H는 시간을 의미하고 M은 분을 의미한다.
3.첫 번째 if 조건식 코드, 분단위가 45분보다 작을 때의 조건식을 작성한다.
if M < 45 : # 분단위가 45분보다 작을 때
이 문제는 입력받는 M분이 45보다 크다면 입력받은 H시 M분에서 바로 45를 빼주면 된다. 그러면 H와 M이 모두 양수이기 때문에 정상적인 시간의 형태를 띨 수 있다. 그렇지만 M이 45보다 적은 경우라면 45를 뺐을 시에 분이 음수로 출력되게 되어 정상적인 시간이 될 수 없다. 그렇기 때문에 입력받는 M분이 45보다 적을 때의 조건식을 만들었다.
4.M이 45보다 작은 경우의 if조건식 하위의 if - else조건식을 작성한다.
if M < 45 : # 분단위가 45분보다 작을 때
if H == 0 : # 0 시이면
H = 23
M += 60
else : # 0시가 아니면 (0시보다 크면)
H -= 1
M += 60
M이 45보다 적으면 H에서는 1을 빼주고 M은 60을 더해주는 방식으로 코드를 작성하였다. 시간을 계산하는데 가장 근접한 식이라고 생각했기 때문이다.
그런데 H가 0 시인 경우에는 H시에서 1을 빼줄 때 음수가 출력되게 된다. (0 - 1 = -1) 그렇게 되면 시간이 음수가 되어 정상적인 시간의 형태가 아니기 때문에 If 조건식은 입력받은 M분이 45보다 작은 경우 안에서 다시 둘로 나뉜다. H가 0인 경우와 그렇지 않은 경우이다.
0시가 아닌 경우는 위에서 설명한 대로 H-=1로 입력받는 H에서 1을 빼주고 M+= 60으로 입력받는 M에서 60을 더하는 문장을 작성하였다. 그리고 0 시인 경우는 H==0으로 조건식을 표현할 수 있고 0시 이전엔 23시가 되어야 하므로 H=23으로 지정하고 입력받는 M에는 60을 더해주었다.
5.코드 마지막 줄, 출력문을 작성한다.
print(H, M-45)
위 조건식에서는 H와 M을 조정하기만 하고 아직 45분을 빼지 않았다. 그래서 45분을 빼주는 식은 맨 마지막에 print 함수 안에서 H와 M-45를 계산한 값을 출력하도록 코드를 작성했다.
그러면 입력받은 M이 45보다 큰 경우에는 입력받은 수 그대로의 H와 M에서 45분을 뺀 수가 출력되고 입력받은 M이 45보다 작은 경우는 if조건식에 따라서 조정된 수 H와 M에서 45분을 뺀 수가 출력될 수 있다.
'파이썬 스킬업 > 백준 알고리즘 연습' 카테고리의 다른 글
백준 2739번 [파이썬 알고리즘] 구구단 (1) | 2020.07.02 |
---|---|
백준 14681번 [파이썬 알고리즘] 사분면고르기 (0) | 2020.07.02 |
백준 2753번 [파이썬] 윤년 (1) | 2020.07.02 |