백준 2884번 : 알람 시계 C프로그래밍
https://www.acmicpc.net/problem/2884
문제
알람시각이 주어졌을 때, 45분 앞선 시간으로 만들려면 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다.
입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.
해당 문제는 주어진 시각에서 45분을 뺀 시각을 구하도록 하고있다.
먼저 크게 2가지로 나눌 수 있다.
1. H가 0일 경우
2. H가 0이 아닐 경우이다.
1의 경우를 생각해보자.
시(H)가 0일 때, H는 분(M)이 45보다 작을 경우에는 23시로 바뀔 것이고,분(M)이 45거나 45보다 클 경우에는 변화없이 출력될 것이다.
2의 경우를 생각해보자.
시(H)가 0이 아니라는 것은 0보다 크다는 것이다. (시간은 음수가 존재하지 않기에)
그 경우, H는 분(M)이 45보다 작을 경우에는 H-1의 값으로 바뀔 것이고, 분(M)이 45거나 45보다 클 경우에는 변화없이 출력될 것이다.
분(M)이 어떻게 달라질지도 생각해보자.
시(H)가 -1이 될 때, M의 값은 M - 45 + 60으로 M + 15의 값이 출력되게 된다.
시(H)가 그대로 일 경우에는 45분을 뺀 M - 45의 값이 출력될 것이다.
그에 따른 코드는 다음과 같다.
#include <stdio.h>
int main()
{
int H;
int M;
scanf("%d %d", &H, &M);
if (H > 0 && M >= 45)
{
printf("%d %d", H, M - 45);
}
else if (H > 0 && M < 45)
{
printf("%d %d", H - 1, M + 15);
}
else if (H == 0 && M < 45)
{
H = 23;
printf("%d %d", H, M + 15);
}
else if (H == 0 && M >= 45)
{
printf("%d %d", H, M - 45);
}
return (0);
}
예제 출력 검사시에는
입력 | 출력 |
10 10 | 9 25 |
23 40 | 22 55 |
0 30 | 23 45 |
0 50 | 0 5 |
위와 같이 출력이 되면 정답인 코드라고 볼 수 있다.