시간 표현(시,분,초)


시/분/초를 나눠서 구현해야 하는 문제는 알고리즘을 모르면 꽤 돌고 돌아서 구현을 하는 경우가 생긴다. (유경험자)

이 문제에서는 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)
sebinChu