(구) solved ac class 문제들/class 1

[class 1]백준 알람 시계(2884번) 풀이 (C++/Python)

isekaipudding 2026. 4. 18. 12:52

문제 : 알람 시계(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분을 출력하게 만듭니다.