[C] 백준 2884번 : 알람시계 맞추기
2020. 5. 30. 10:36
2884번 문제는 아래와 같다.
위의 문제를 처음 보고 경우의 수를 여러가지로 나눠야겠다는 생각을 했다.
(알람 시간은 H시 M분)
1) H가 1 이상일 때
① M이 45 미만일 때
② M이 45 이상일 때
2) H가 0일 때
① M이 45 미만일 때
② M이 45 이상일 때
위의 네가지 경우를 if문과 else if문을 활용하여 아래와 같은 코드로 작성하였다.
#include <stdio.h>
int main(){
int H, M;
int H0 = 0;
int M0 = 0;
scanf("%d %d", &H, &M);
if(0<=H && H<=23 && 0<=M && M<=59){
if(0 < H && M < 45) //1) H가 1 이상일 때 ① M이 45 미만일 때
{
H0 = H-1;
M0 = M+60-45;
}
else if(0 < H && M => 45) //1)H가 1 이상일 때 ② M이 45 이상일 때
{
H0 = H;
M0 = M-45;
}
else if(H==0 && M < 45) // 2)H가 0일 때 ① M이 45 미만일 때
{
H0 = 23;
M0 = M+60-45;
}
else if(H==0 && M => 45) // 2)H가 0일 때 ② M이 45 이상일 때
{
H0 = 0;
M0 = M-45;
}
printf("%d %d", H0, M0);
}
else{
printf("error");
}
}
Dev c++에서 실행해보면 문제에서 예제입력 값들을 입력하면 예제출력 값들이 잘 나오는 것을 확인할 수 있다.
코드를 짜다가 두가지 실수를 했다.
하나는 M의 범위를 설정할 때 단순히 미만, 초과로 설정했다가 M이 45일 경우를 고려하지 않았던 부분이었다.
또 하나는 1)-② 의 경우일 때 시간은 변하지 않아 H0=H가 되는건데 H0=H-1로 잘못 적었던 부분이었다.
이렇게 경우를 나눠서 코드를 짤 경우에는 범위와 해당사항들을 최대한 꼼꼼하게 살펴보고 짜도록 하자.
'Programming > BOJ' 카테고리의 다른 글
[C] 백준 2439번 : 별 찍기 - 2 (0) | 2020.06.02 |
---|---|
[C] 백준 10950번 : 정수를 입력받은 후 합 출력 (0) | 2020.06.01 |
[C] 백준 2753번 : 윤년 (0) | 2020.05.30 |
[C] 백준 2588번 : 세자리수 곱셈 (0) | 2020.05.30 |
[C] 백준 1008번 : A/B 연습 (0) | 2020.05.30 |