[백준/C++] 2884번 알람 시계

Dandyoung·2023년 10월 27일

https://www.acmicpc.net/problem/2884

이 문제는 아주 간단한 구현문제에 해당한다. 그렇다고해서 코딩 실수를 하진 않았다.. 여전히 잔실수가 많다..

이 경우 총 4가지의 경우의 수가 존재하는데, 차근차근히 살펴보자.

'hour == 시간', 'min == 분' 일 때,

1. hour >= 1 & min >= 45

아주 기본적인 경우이다. 시간(hour)를 건드릴 필요도 없고, min에서 45를 빼주기만 하면 된다.
ex) 11 : 45 -> 11: 00

2. hour >= 1 & min < 45

이는 min이 45 미만일 경우, hour에서 1을 빼주어야한다. 1시간이 줄어드는 대신, 60분이 늘어나는 것이기 때문에, min에 60을 더한 후 45를 빼주면 된다.
ex) 10 : 40 -> 09 : 55

3. hour < 1 & min >= 45

해당 경우는 00시인 경우를 의미하는데, 이 또한 시간(hour)를 건드릴 필요 없고, min에서 45를 뺴주기만 하면 된다.
ex) 00 : 50 -> 00 : 05

4. hour < 1 & min < 45

이 경우는 예시를 먼저 보면,
ex) 00 : 30 인 경우, 23 : 45 가 되어야 한다.

먼저, hour에서 한 시간을 빼준다. 그 후 시간은 24시간이기 때문에 24를 더해주게 되며, min은 1시간이 줄어드는 대신, 60분이 늘어나는 것이기 때문에 min에 60을 더한 후 45를 빼주면 된다.

참고로, 문제에서 00 : 05 -> 0 : 5 와 같이 불필요한 '0'은 제외 후, 출력하라고 요구한다. 따라서, 별다른 후처리 없이 위 4가지 조건에 맞게 cout 문을 짜주면 된다.

최종 솔루션

#include <iostream>

using namespace std;

int main(){
    int hour , min;
    cin >> hour >> min;

    if(hour >= 1 & min >= 45){
        cout << hour << " " << min - 45;
    }
    else if(hour >= 1 & min < 45){
        cout << hour - 1 << " "<< min + 60 - 45;
    }
    else if(hour < 1 & min >= 45){
        cout << hour << " " << min- 45;
    }
    else if(hour < 1 & min < 45){
        cout << hour -1 + 24 << " " << min + 60 - 45;
    }    
    return 0;
}

나의 솔루션보다 더 효율적인 솔루션이 있을 수 있을 것 같다. 시간이 된다면 친구들과 공유해봐야겠다.

profile
코딩이어려운당신에게,,

0개의 댓글