백준/브론즈2

[Python/C] 백준 1408번 - 24

두부마라탕 2025. 4. 17. 15:54

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


문제

도현이는 Counter Terror Unit (CTU)에서 일하는 특수요원이다. 도현이는 모든 사건을 정확하게 24시간이 되는 순간 해결하는 것으로 유명하다. 도현이는 1시간 만에 범인을 잡을 수 있어도 잡지 않는다. 정확하게 24시간이 되는 순간이 아니면 잡지 않는 CTU 특수요원이다.

2008년 3월 3일 월요일, CTU는 새학기에 맞춰 핵폭탄을 날리겠다는 테러 정보를 입수했다. CTU에서는 특수요원 도현이에게 이 임무를 맡겼다. CTU의 프로그래머 준규는 이 사건의 배후가 김선영이란 것을 해킹을 통해 밝혀내었다.

도현이는 선영이를 임무를 시작한지 정확하게 24시간이 되는 순간에 잡으려고 한다.

만약 지금 시간이 13:52:30이고, 임무를 시작한 시간이 14:00:00 이라면 도현이에게 남은시간은 00:07:30 이다.

모든 시간은 00:00:00 ~ 23:59:59로 표현할 수 있다. 입력과 출력에 주어지는 모든 시간은 XX:XX:XX 형태이며, 숫자가 2자리가 아닐 경우에는 0으로 채운다.

도현이가 임무를 시작한 시간과, 현재 시간이 주어졌을 때, 도현이에게 남은 시간을 구하는 프로그램을 작성하시오.

 

[Python] 코드

ch, cm, cs = map(int, input().split(":"))
sh, sm, ss = map(int, input().split(":"))

current = ch*3600 + cm*60 + cs
start = sh*3600 + sm*60 +ss

time = start - current

print(f'{time//3600%24:02}:{time%3600//60:02}:{time%60:02}')

 

풀이

1. 현재 시간과 임무를 시작한 시간을 받아준다.

2. 시간을 초 단위로 계산한다

3. 시작 시간에서 현재 시간을 빼준다

4. 나온 시간의 시, 분, 초를 출력해준다.

  4-1. 출력할 때 0이더라도 00 <- 이런 식으로 2자릿수를 채워서 출력해야 하기에 :02를 사용했다. 02는 2자릿수이고 0을 채워주는 역할을 한다.

 

[C] 코드

#include <stdio.h>

int main() {
    int ch, cm, cs, sh, sm, ss, h, m, s;

    scanf("%d:%d:%d", &ch, &cm, &cs);
    scanf("%d:%d:%d", &sh, &sm, &ss);

    int current = ch*3600 + cm*60 + cs;
    int start = sh*3600 + sm*60 + ss;

    int time = start - current;
    if (time <= 0) time += 86400;

    h = time / 3600 % 24;
    m = (time % 3600) / 60;
    s = time % 60;

    printf("%02d:%02d:%02d\n", h, m, s);
    return 0;
}

 

풀이

파이썬 풀이와 동일한데 한 가지 차이점은 시간을 구할 때 파이썬은 음수%양수일 때 자연스럽게 wrap 해주지만 c는 그렇지 않기 때문에 time 뺄셈할 때 24시간을 더해줬다. 이점 빼고는 파이썬 풀이와 다를게 없다.