728x90
https://www.acmicpc.net/problem/3029
3029번: 경고
첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, 초) hh는 0보다 크거나 같고, 23보다 작거나 같으며, 분과 초는 0보다 크거나 같고, 59보다 작거나 같다. 둘째 줄에는 나트륨을 던질 시간
www.acmicpc.net
쉬운 문제였는데 계속 틀렸다고 해서 뭐가 잘못되었는지 찾아보니, 하나의 조건을 만족하지 못했다.
"적어도 1초를 기다리며, 많아야 24시간을 기다린다"
이 조건을 처음 봤을 때 그냥 1초 이상의 값이 나오는 거구나 하고 그냥 넘겨버렸는데 이게 문제가 되었다ㅠ
시작시간과 종료시간이 동일하면 0초를 기다린 것이 아니라 24시간을 기다린 것임을 유의해야 한다.
문제를 제대로 읽기..!
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
string s1, s2, ans = "";
int start[3], end[3]; //hour, minute, second
cin >> s1 >> s2;
int index = 0, index2 = 0;
for(int i=0; i<7; i+=3){
start[index++] = (s1[i]-'0')*10 + (s1[i+1]-'0');
end[index2++] = (s2[i]-'0')*10 + (s2[i+1]-'0');
}
if(end[0] == start[0] && end[1] == start[1] && end[2] == start[2]){
cout << "24:00:00" << '\n';
return 0;
}
//초
if(end[2] < start[2]){ //만약 시작시간보다 크다면
end[2] += 60; //60초 더해주기
end[1] -= 1;
}
int an = end[2] - start[2];
if(an < 10) ans = ":0" + to_string(an);
else ans = ":" + to_string(an);
//분
if(end[1] < start[1]){ //만약 시작시간보다 크다면
end[1] += 60; //60초 더해주기
end[0] -= 1;
}
an = end[1] - start[1];
if(an < 10) ans = ":0" + to_string(an) + ans;
else ans = ":" + to_string(an) + ans;
//시
if(end[0] < start[0]){ //만약 시작시간보다 크다면
end[0] += 24; //24 더해주기
}
an = end[0] - start[0];
if(an < 10) ans = "0" + to_string(an) + ans;
else ans = to_string(an) + ans;
cout << ans << '\n';
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 1181번: 단어 정렬 (0) | 2022.07.18 |
---|---|
[백준/c++] 9046번: 복호화 (0) | 2022.07.17 |
[백준/c++] 9093번: 단어 뒤집기 (0) | 2022.07.16 |
[백준/c++] 5568번: 카드 놓기 (0) | 2022.07.14 |
[백준/c++] 2503번: 숫자 야구 (0) | 2022.07.14 |