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

이 문제는 아주 간단한 구현문제에 해당한다. 그렇다고해서 코딩 실수를 하진 않았다.. 여전히 잔실수가 많다..
이 경우 총 4가지의 경우의 수가 존재하는데, 차근차근히 살펴보자.
1. hour >= 1 & min >= 45
아주 기본적인 경우이다. 시간(hour)를 건드릴 필요도 없고, min에서 45를 빼주기만 하면 된다.
ex) 11 : 45 -> 11: 002. hour >= 1 & min < 45
이는 min이 45 미만일 경우, hour에서 1을 빼주어야한다. 1시간이 줄어드는 대신, 60분이 늘어나는 것이기 때문에, min에 60을 더한 후 45를 빼주면 된다.
ex) 10 : 40 -> 09 : 553. hour < 1 & min >= 45
해당 경우는 00시인 경우를 의미하는데, 이 또한 시간(hour)를 건드릴 필요 없고, min에서 45를 뺴주기만 하면 된다.
ex) 00 : 50 -> 00 : 054. 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;
}
나의 솔루션보다 더 효율적인 솔루션이 있을 수 있을 것 같다. 시간이 된다면 친구들과 공유해봐야겠다.