알람 시계

문제 링크

알람 시계

분석

시간 HM이 주어질 때, 45분이 빠른 시간을 반환해야합니다.
이때, 주어지는 시간은 24시간으로 표현된 상태입니다.

단순하게 분에 45를 뺀다면, 시간 단위에 의해 분이 음수가 될 수 있기 때문에 이 경우를 처리해주어야 합니다.
분이 45분 이상일 경우 시간은 변하지 않고 빼기만 해주면 되지만, 45분 미만일 경우 시간에서 1시간을 빌려 분을 계산해주면 됩니다.

다른 방법으로 시간을 모두 분으로 변환하고 기존 분과 합쳐 45분을 빼고 다시 시간과 분으로 재조립해주는 방법이 있습니다.
시간을 분으로 변환하여 총 시간을 분으로 나타내려 할 경우 $H \times 60 + M$와 같습니다.

시간이 0시일 경우 단순히 시간을 감소시키는 방식에서는 음수가 될 수 있기 때문에 추가 처리가 필요합니다.
만약, 전체 시간을 분 단위로 변환한 후 24시간을 의미하는 1440분으로 나머지 연산을 하면 이러한 문제를 해결할 수 있습니다.

풀이

#include <iostream>

int main()
{
    int H, M;
    
    // 입력
    std::cin >> H >> M;
    
    // 총 시간을 분으로 관리한다.
    int TotalMinutes = H * 60 + M;
    
    // 45분을 앞선 값을 구한다.
    int ResultMinutes = (TotalMinutes - 45 + 24 * 60) % (24 * 60);
    
    // 출력
    std::cout << ResultMinutes / 60 << " " << ResultMinutes % 60 << std::endl;
}

45분 앞선 값을 구할 때 $24 \times 60$를 더하는 것은 0시 45분 이전일 때에 다시 23시로 돌아가기 위해 사용합니다.
이후 $24 \times 60$의 값으로 다시 나머지 값을 사용하는 것은 24시간보다 커지는 것에 대해 처리하기 위함입니다.

$24 \times 60$ 대신 $1440$이라는 값을 사용해도 무방합니다.

성능 요약

시간 복잡도는 상수 시간에 끝나기 때문에 $O(1)$입니다.

공간 복잡도는 고정된 크기의 상수 공간을 사용하기 때문에 $O(1)$입니다.

메모리: 2020 KB

시간: 0 ms

Date:     Updated:

카테고리:

태그:

Baekjoon 카테고리 내 다른 글 보러가기

댓글남기기