STUDY/Algorithm

[백준] 1942 디지털시계 python

sinawi95 2022. 1. 14. 10:35
728x90

https://www.acmicpc.net/problem/1942

 

1942번: 디지털시계

디지털시계는 일반적으로 시각을 “hh:mm:ss”의 형태로 표현한다. hh는 00 이상 23 이하의 값을, mm과 ss는 00 이상 59 이하의 값을 가질 수 있다. 이러한 형태의 시각에서 콜론(“:”)을 제거하면 “hhm

www.acmicpc.net

손 풀려다가 방향을 잘못잡아 어렵게 푼 문제이다.

시간이 주어졌을때 각 구간에서 3의 배수인 시계 정수의 개수를 구하는 문제이다.

이걸 어떻게 풀지 고민하다가 DP 처럼 딕셔너리 자료형을 사용해서 모든값을 구하는 방향으로 했다.

반복문으로 00:00:00 부터 23:59:59 까지 다 구하면 될줄 알았으나 time_dict[num1-1]에서 key error가 떠서 마지막에 실패를 하는 것을 보았다.

반복문으로 모든 값을 구한건은 맞았으나 10000에서 1을 뺀 값이 9999이므로 5959와 맞춰주는 작업이 필요했다. (100에서도 마찬가지이다.)

그렇게 했더니 다행이 넘길수 있었다.

time_dict = dict()
prev = None
for i in range(24):
    time_dict[i * 10000 - 1] = time_dict[prev] if prev is not None else 0
    for j in range(60):
        time_dict[i * 10000 + j * 100 - 1] = time_dict[prev] if prev is not None else 0
        for k in range(60):
            tmp = i * 10000 + j * 100 + k
            time_dict[tmp] = time_dict[prev] if prev is not None else 0
            if not tmp % 3:
                time_dict[tmp] += 1
            prev = tmp

ans = ''
for _ in range(3):
    num1, num2 = map(lambda x:(int(''.join(x.split(":")))), input().split())
    tmp = 0
    if num1 > num2:
        tmp = time_dict[235959] - time_dict[num1 - 1] + time_dict[num2] - time_dict[-1]
    else:
        tmp = time_dict[num2] - time_dict[num1 - 1]
    ans += f'{tmp}\n'
print(ans)