본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 3029번 : 경고 답

반응형

www.acmicpc.net/problem/3029

 

3029번: 경고

첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, 초) hh는 0보다 크거나 같고, 23보다 작거나 같으며, 분과 초는 0보다 크거나 같고, 59보다 작거나 같다. 둘째 줄에는 나트륨을 던질 시간

www.acmicpc.net

문자열을 처리하는 문제였습니다.

 

풀이방법

 * 정인이는 1초 ~ 24시간 사이를 기다릴 수 있습니다. 따라서 시간이 같으면 24시간을 기다려야합니다.

 * 시 : 분 : 초 이렇게 출력시  시간부분이 24이상의 숫자가 출력되서는 안됩니다.

 

Code

#include <bits/stdc++.h>
using namespace std;
int nowTime[3], doTime[3];
int sec1,sec2,waitTime;
string getAns(){
    string tmp ="";
    if(waitTime / 3600 < 10) tmp += "0";
    if(waitTime / 3600 >= 24) {
        int newTime = waitTime/3600 - 24;
        if(newTime < 10) tmp += "0";
        tmp += to_string(newTime) + ":";
    }
    else tmp += to_string(waitTime / 3600) + ":";
    waitTime %= 3600;
    if(waitTime / 60 < 10) tmp += "0";
    tmp += to_string(waitTime / 60) + ":";
    waitTime %= 60;
    if(waitTime < 10) tmp +="0";
    tmp += to_string(waitTime);
    return tmp;
}

int main(){
    scanf("%d:%d:%d",&nowTime[0],&nowTime[1],&nowTime[2]);
    scanf("%d:%d:%d",&doTime[0],&doTime[1],&doTime[2]);
    sec1 = nowTime[0] * 3600 + nowTime[1] * 60 + nowTime[2];
    sec2 = doTime[0] * 3600 + doTime[1] * 60 + doTime[2];
    if(sec1==sec2) cout << "24:00:00\n";
    else {
        waitTime = 24 * 3600 - sec1 + sec2;
        cout << getAns();
    }
}

 

Test Case

몇 가지 테스트 케이스를 작성해봤습니다.

 

09:23:49
10:48:59
01:25:10

00:00:00
00:00:00
24:00:00

08:00:01
08:00:02
00:00:01

08:00:02
08:00:01
23:59:59