문제 : 알람 시계(2884번)(Bronze III)
문제 링크 : https://www.acmicpc.net/problem/2884
출처 : Baekjoon Online Judge
현재 시각에서 45분 전의 시각을 구현하면 되는 문제입니다.
현재 시각이 예를 들어 10시 30분이라고 가정합니다.
10시 30분을 분으로 표현하면 630분이 됩니다.
그 상태에서 45분을 빼서 다시 시/분으로 표현하면 9시 45분이 나옵니다.
그러면 만약 0시 30분이면 어떻게 될까요?
그러면 30분이 되고 여기서 -45분을 하면 -15분이 됩니다.
-15분은 0시 0분으로부터 15분 전을 의미합니다.
그러니 23시 45분이 될 것이고 이것을 분으로 표현하면 23 * 60 + 45 = 1425분이 되며 이것은 24시 0분(= 1440분)으로부터 15분 전입니다.
그러므로 만약 0분보다 더 작은 값이 나온다면 +1440분 연산해서 제대로 된 시/분을 구할 수 있습니다.
아래에 해당 알고리즘을 C++로 표현한 것입니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int h, m;
cin >> h >> m;
int time = 60 * h + m;
time -= 45;
if(time < 0) time += 60 * 24;
cout << time / 60 << " " << time % 60;
return 0;
}
그러면 Python에서도 동일하게 구하면 될까요?
물론 Python으로 해당 논리를 그대로 사용해서 구현할 수 있습니다.
다만, C++와 다르게 Python은 좀 더 간단하게 구현할 수 있습니다.
import sys
input = sys.stdin.readline
H, M = map(int, input().split())
time:int = (60 * H + M - 45) % 1440
print(time // 60, time % 60)
변경 후 시각 = 변경 전 시각 - 45 = 60 * H + M - 45입니다.
그런데 여기서 별도의 논리를 사용하지 않고 바로 모듈러 연산을 했습니다.
C++에서는 -1 % 15을 연산하면 -1로 나오게 됩니다.
하지만 Python에서는 -1 % 15를 연산하면 14가 나옵니다.
14, 29, 44, ...은 등차수열이며 14, -1, -16, ...도 등차수열입니다.
N % M일 때 ..., N - 2M, N - M, N, N + M, N + 2M, ...는 모두 M씩 띄워진 등차수열이며 Python에서는 이 수들을 모두 같은 나머지를 갖는 것으로 약속했습니다.
따라서 -15 % 1440는 1425로 바로 출력하게 되며 바로 23시 45분을 출력하게 만듭니다.
'(구) solved ac class 문제들 > class 1' 카테고리의 다른 글
| [class 1]백준 최소, 최대(10818번) 풀이 (C++/Python) (0) | 2026.04.20 |
|---|---|
| [class 1]백준 ACM 호텔(10250번) 풀이 (C++/Python) (0) | 2026.04.19 |
| [class 1]백준 최댓값(2562번) 풀이 (C++/Python) (0) | 2026.04.17 |
| [class 1]백준 A + B - C(31403번) 풀이 (C++/Python) (0) | 2026.04.16 |
| [class 1]백준 숫자의 합(11720번) 풀이 (C++/Python) (0) | 2026.04.16 |