문제
대회가 특정 시각(11일 11시 11분)에 시작할 때, 입력으로 주어진 시각까지 대회 시작 후 몇 분이 경과했는지 계산하는 문제다. 입력 시각이 대회 시작 이전이면 -1을 출력한다.
입력
- 한 줄에 일(d), 시(h), 분(m)이 주어진다.
출력
- 대회 시작 후 경과 분 수를 출력하고, 시작 전이면 -1을 출력한다.
예제
| 입력 | 출력 |
|---|---|
11 11 11 | 0 |
11 11 10 | -1 |
11 12 0 | 49 |
풀이
모든 시각을 분 단위로 변환한 후 대회 시작 시각(기준값)과의 차이를 구한다.
- 입력 d, h, m을 총 분으로 환산한다:
m + h * 60 + d * 60 * 24. - 대회 시작 기준값: 11일 11시 11분 =
11 + 11 * 60 + 11 * 60 * 24 = 15851분. - 차이가 음수이면 -1, 그렇지 않으면 차이를 출력한다.
핵심 아이디어: 날짜와 시각을 단일 단위(분)로 통일하면 단순 뺄셈으로 경과 시간을 계산할 수 있다.
코드
#include <iostream>
using namespace std;
int d, h, m;
int main()
{
cin >> d >> h >> m;
int pivot = 11 + 11 * 60 + 11 * 60 * 24;
int ans = m + h * 60 + d * 60 * 24 - pivot;
if (ans < 0)
cout << -1 << '\n';
else
cout << ans << '\n';
}복잡도
- 시간: O(1) — 단일 수식 계산
- 공간: O(1)