본문 바로가기

Beakjoon/else

[백준] 3029번 경고 (C++) - 시간문제

문제

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

 

3029번: 경고

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

www.acmicpc.net

코드

#include <iostream>
#include <string>

using namespace std;

int hms1[3];
int hms2[3];

int main(){
  string t1, t2;
  cin >> t1 >> t2;

  for(int i=0; i<3; i++){
    hms1[i] = stoi(t1.substr(3*i,2));
    hms2[i] = stoi(t2.substr(3*i,2));
  }
  if(hms2[2]-hms1[2]<0){
    hms2[2]+=60;
    hms1[1]+=1;
  }
  if(hms2[1]-hms1[1]<0){
    hms2[1]+=60;
    hms1[0]+=1;
  }
  if(hms2[0]-hms1[0]<0||t1==t2){
    hms2[0]+=24;
  }

  for(int i=0; i<3; i++){
    int result = hms2[i]-hms1[i];
    if(result/10==0) cout << 0;
    cout << result;
    if(i!=2) cout << ':';
  }
  return 0;
}

정리

"정인이는 적어도 1초를 기다리며, 많아야 24시간을 기다린다."에서 알 수 있듯이 동이한 시간이 입력되면 24:00:00 를 출력해야 한다. 그래서 세 번째 if문에 t1==t2일때도 고려해주었다.

참조