© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 1942 - 디지털시계

2024-06-19
BOJ
브론즈 I
python
원본 문제 보기
수학
구현

문제

BOJ 1942 - 디지털시계

시작 시각부터 종료 시각까지 매초마다 HHMMSS를 이어붙인 6자리 수가 3의 배수인 횟수를 구하라. 3개의 테스트 케이스가 주어진다.

입력

3줄에 걸쳐 시작 시각과 종료 시각이 HH:MM:SS 형식으로 주어진다.

출력

각 케이스에 대해 3의 배수인 횟수를 출력한다.

예제

입력출력
00:00:00 00:00:10 12:00:00 12:00:10 11:11:11 11:11:114 4 0

풀이

시각을 초 단위로 변환하여 순회하면서, HHMMSS 수가 3의 배수인지 확인한다.

  1. 시작/종료 시각을 초 단위로 변환한다 (H3600 + M60 + S)
  2. 종료가 시작보다 작으면 24시간(86400초)을 더한다
  3. 각 초에 대해 HHMMSS 형태의 수로 변환하여 3의 배수인지 확인한다
  4. 3의 배수이면 카운트를 증가시킨다

핵심 아이디어: 하루는 최대 86400초이므로 모든 초를 순회해도 O(1) 상수 시간이다.

코드

def realtime(h, m, s):
    return 3600 * h + 60 * m + s
 
 
def tentime(val):
    return 10000 * (val // 3600) + 100 * ((val % 3600) // 60) + val % 60
 
 
for i in range(3):
    a, b = input().split()
    answer = 0
    dataa = list(map(int, a.split(":")))
    datab = list(map(int, b.split(":")))
    vala = realtime(*dataa)
    valb = realtime(*datab)
    if vala > valb:
        valb += realtime(24, 0, 0)
    for i in range(vala, valb + 1):
        if tentime(i) % 3 == 0:
            answer += 1
    print(answer)

복잡도

  • 시간: O(86400) = O(1) (최대 하루 초 수)
  • 공간: O(1)