시간 표현(시,분,초)
시/분/초를 나눠서 구현해야 하는 문제는 알고리즘을 모르면 꽤 돌고 돌아서 구현을 하는 경우가 생긴다. (유경험자)
이 문제에서는 3으로 나누어 떨어지는 시계 정수의 개수를 구해야 하지만,
시간 문제를 푸는 방법에 집중하여 포스팅하려 한다. (복습용으로..🤓)
시: 0부터 24까지의 숫자로 나타낼 수 있음. 60분에 1시간이므로 분값이 60으로 증가되었을 때, 분 변수는 0으로 초기화되고 시 변수는 +1
분: 0부터 60까지의 숫자로 나타낼 수 있음. 60초에 1분이므로 60초가 되었을 때 초 변수는 0으로, 분 변수에는 +1 추가
초: 0부터 60까지의 숫자로 나타낼 수 있음.
# 표현 방법
if s1 == 60 : m1 += 1; s1 = 0
if m1 == 60 : h1 += 1; m1 = 0
if h1 == 24 : h1 = 0
알고리즘
시작 시각과 끝 시각 사이에 존재하는 모든 시간을 표현하기 위해서 초 변수부터 +1 증가(s += 1)해준다.
또한 정수 시간은 hh:mm:ss -> hhmmss로 표현되므로 6자리 숫자로 나타낼 수 있다.
x = h1*10000 + m1*100 + s1
초를 1씩 증가하면서 시, 분, 초 단위를 변경해주려면 while문 안에서 반복적인 작업을 해줘야 한다. 증가하는 시작 시각이 끝 시각과 같아지면 이 반복문을 종료한다.
전체 코드
for _ in range(3):
start, end = input().split()
h1, m1, s1 = map(int,start.split(':'))
h2, m2, s2 = map(int,end.split(':'))
ans = 0
while True:
if s1 == 60 : m1 += 1; s1 = 0
if m1 == 60 : h1 += 1; m1 = 0
if h1 == 24 : h1 = 0
x = h1*10000 + m1*100 + s1
if x % 3 == 0 : ans += 1
if (h1 == h2) and (m1 == m2) and (s1 == s2): break
s1 += 1
print(ans)
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/15656] N과 M(7) (0) | 2023.01.29 |
---|---|
[백준/11383] 뚊 | 2차원 이미지 | 행렬 한줄씩 걷어내기(?) (0) | 2023.01.28 |
[백준/2309] 일곱 난쟁이 | sorted()를 반복문의 대상으로 (0) | 2023.01.25 |
[백준/10809] 알파벳 찾기 | find() 찾고자 하는 문자의 인덱스를 반환 (0) | 2023.01.22 |
[백준/1436] 영화감독 숌 (0) | 2023.01.22 |