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시간을 더해줬다. 이점 빼고는 파이썬 풀이와 다를게 없다.
'백준 > 브론즈2' 카테고리의 다른 글
| [Python] 백준 1673번 - 치킨 쿠폰 (0) | 2025.04.25 |
|---|---|
| [Python] 백준 1100번 - 하얀 칸 (0) | 2025.04.25 |
| [Python] 백준 1076번 - 저항 (0) | 2025.04.24 |
| [Python] 백준 1075번 - 나누기 (0) | 2025.04.24 |
| [Python] 백준 1009번 - 분산처리 (0) | 2025.04.24 |