© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 3029 - 경고

2024-08-10
BOJ
브론즈 III
cpp
원본 문제 보기
구현
문자열

문제

BOJ 3029 - 경고

현재 시각과 알람 시각이 HH:MM:SS로 주어질 때, 알람이 울릴 때까지 남은 시간을 구하라. 같은 시각이면 24:00:00을 출력한다.

입력

현재 시각과 알람 시각이 HH:MM:SS 형태로 주어진다.

출력

남은 시간을 HH:MM:SS 형태로 출력한다.

예제

입력출력
20:00:00 04:00:0008:00:00

풀이

시각을 초 단위로 변환하여 차이를 구하고, 24시간 순환을 처리한다.

  1. 시각 문자열을 파싱하여 초 단위 정수로 변환한다
  2. 알람 시각 - 현재 시각의 차이를 구한다
  3. 차이가 음수면 246060을 더한다 (다음 날)
  4. 차이가 0이면 "24:00:00"을 출력한다
  5. 그 외에는 시:분:초 형식으로 출력한다

핵심 아이디어: 시각을 초로 통합하면 단순 뺄셈으로 시간 차이를 구할 수 있고, 음수는 24시간 추가로 처리한다.

코드

#include <iostream>
using namespace std;
 
int ttoi(char t[])
{
  return ((t[0] & 15) * 10 + (t[1] & 15)) * 60 * 60 + ((t[3] & 15) * 10 + (t[4] & 15)) * 60 + ((t[6] & 15) * 10 + (t[7] & 15));
}
 
int main()
{
  char ct[9], na[9];
  cin >> ct >> na;
  int c = ttoi(ct), e = ttoi(na), t = e - c;
  if (t < 0)
    t += 24 * 60 * 60;
  if (t == 0)
    cout << "24:00:00";
  else
    printf("%02d:%02d:%02d", t / 60 / 60, t / 60 % 60, t % 60);
  return 0;
}

복잡도

  • 시간: O(1)
  • 공간: O(1)