본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 5074 : When Do We Finish?

반응형

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

 

5074번: When Do We Finish?

For each line of input, produce one line of output containing a single time, also in the format hh:mm, being the end time of the event as a legal 24 hour time. If this time is not on the same day as the start time, the time will be in the format hh:mm +n,

www.acmicpc.net

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

이벤트 시작 시간 sh, 분 sm, 이벤트 소요시간 eh, 이벤트 소요분 em 모두 분으로 환산한 값을 저장할 tot, 지난 일 수를 저장할 plusDay를 선언한 후 적절히 필요 변수에 입력해줍니다.

📔 풀이과정

tot에 전체 시간을 분으로 환산한 값들의 총합을 저장합니다. plusDay는 tot/60/24가 됩니다.출력형식에 맞게 string으로 변환시켜줄 함수 getAnsString을 수행해 vector 형태로 반환해줍니다. 이를 변수 ans에 선언 후 저장합니다.

📔 정답출력

출력형식에 맞게 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;

vector <string> getAnsString(int ansHour, int ansMinute){
    vector <string> tmp(2,"");
    if(ansHour < 10) tmp[0] += '0';
    tmp[0] += to_string(ansHour);
    if(ansMinute < 10) tmp[1] += '0';
    tmp[1] += to_string(ansMinute);
    return tmp;
}

int main(){
    while(1){
        int sh, sm, eh, em, tot = 0, plusDay = 0;
        scanf("%d:%d %d:%d", &sh, &sm, &eh, &em);
        if(!sh && !sm && !eh && !em) break;
        tot = sh * 60 + sm + eh * 60 + em;
        plusDay = tot / 60 / 24;
        vector <string> ans = getAnsString(tot / 60 % 24, tot % 60);
        if(plusDay) cout << ans[0] << ':' << ans[1] << ' ' << "+" << plusDay;
        else cout << ans[0] << ':' << ans[1];
        cout << '\n';
    }
}