카테고리 없음

[백준/Python] 1942 : 디지털시계

danni_15 2025. 5. 17. 01:42

문제

문제

디지털시계는 일반적으로 시각을 “hh:mm:ss”의 형태로 표현한다. hh는 00 이상 23 이하의 값을, mm과 ss는 00 이상 59 이하의 값을 가질 수 있다. 이러한 형태의 시각에서 콜론(“:”)을 제거하면 “hhmmss”라는 정수를 얻을 수 있는데, 이러한 정수를 시계 정수라고 한다. 예를 들어, 오후 5시 5분 13초, 즉 17:05:13의 시계 정수는 170513이고, 오전 0시 7분 37초, 즉 00:07:37의 시계 정수는 737이다.

이 문제에서 시간이란 시각의 구간을 나타낸다. 예를 들어 [00:59:58, 01:01:24]와 같이 시작하는 시각과 끝나는 시각으로 이루어진 구간을 우리는 시간이라고 부른다. (이러한 구간에는 시작하는 시간과 끝나는 시간도 포함된다)

이렇게 시간이 구간으로 주어지면, 그 구간에 포함되는 시계 정수들을 나열할 수 있다. 예를 들어 [00:59:58, 01:01:24]에 포함되는 시계 정수는 5958, 5959, 다음으로 10000 이상 10059 이하, 마지막으로 10100 이상 10124 이하로 총 87개가 된다. 우리는 이처럼 특정한 시간에 포함되는 시계 정수들 중, 3의 배수인 것이 몇 개나 있는지를 알고 싶다.

시간은 자정을 포함할 수도 있다. 즉 [23:59:03, 00:01:24]처럼 시작하는 시각의 시계 정수(235903)가 끝나는 시각의 시계 정수(124)보다 클 수도 있다. 물론 이 경우 이 구간에 포함되는 시계 정수는 235903 이상 235959 이하, 0 이상 59 이하, 100 이상 124 이하가 된다. 모든 구간이 포함하는 시간은 만 하루, 즉 24시간보다는 항상 작다고 가정해도 좋다.

시간이 시작하는 시각과 끝나는 시각으로 주어졌을 때, 이 구간에 포함되는 시계 정수들 중, 3의 배수인 것의 개수를 구하는 프로그램을 작성하시오.

입력

세 개의 입력이 주어진다. 첫째 줄부터 세 줄에 걸쳐 시작하는 시각과 끝나는 시각이 “hh:mm:ss”의 형태로 주어진다. 시작하는 시각과 끝나는 시각 사이에는 빈 칸이 하나 있어서, 한 줄마다 (빈 칸을 포함하여) 총 17글자가 입력으로 주어진다. 시작하는 시각과 끝나는 시각은 항상 다르다.

출력

첫째 줄부터 세 개의 줄에 걸쳐 입력된 구간에 포함되는 시계 정수들 중, 3의 배수인 것의 개수를 출력한다. 입력된 순서대로 각 줄에 한 개씩 차례로 출력하면 된다.

예제 입력 1 복사

00:59:58 01:01:24
22:47:03 01:03:24
00:00:09 00:03:37

 

예제 출력 1 복사

29
2727
70

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

 


Algorithm

1.입력을 3번하여 각 케이스에 따른 결과값을 도출할 것이므로 전체적으로 3번 반복하도록 반복문을 구성한다,

2.시작하는 시간과 끝나는 시간을 공백을 기준으로 a와b에 나누어 저장한다.

3.시작하는 시간과 끝나는 시간 a,b를 시간,분,초로 나누어 h,m,s로 세분화하여 저장한다.

4. 시작하는 시각의 시계 정수와 끝나는 시각의 시계 정수를 watch 변수에 저장한다.

5.이후 h,m,s를 int형으로 변화시킨다.

6. 시작하는 시각의 시계 정수와 끝나는 시각의 시계 정수 중 어떤 수가 큰지 비교하여 그 차를 구해 몇번 반복할지를 결정하는 변수인sub에 저장시킨다.

7.시작하는 시각에서 1초씩 증가시키면서 3의배수인지 아닌지 확인한 후 3의 배수이면 count를 증가시킨다. 이를 sub만큼 반복시켜 확인한다.

8.반복이 끝나면 count를 출력한다.

 


 

 

Code

for i in range(3):
    a,b=input().split()
    h1, m1, s1 = map(str, a.split(':'))
    h2, m2, s2 = map(str, b.split(':'))

    watch1=int(h1+m1+s1)
    watch2=int(h2+m2+s2)

    h1=int(h1)
    m1=int(m1)
    s1=int(s1)
    h2=int(h2)
    m2=int(m2)
    s2=int(s2)
        
    if watch1<watch2:
        sub=h2*60*60+m2*60+s2-(h1*60*60+m1*60+s1)+1
    else:
        sub=24*60*60-(h1*60*60+m1*60+s1)+1+h2*60*60+m2*60+s2
    count=0
    
    for j in range(sub):
        if s1==60:
            m1+=1
            s1=00
        if m1==60:
            h1+=1
            m1=00
        if h1==24:
            h1==00
            
        result=int(str(h1)+str(m1)+str(s1))
        
        if result%3==0:
            count+=1
        s1+=1
        
    print(count)