[C] 백준 2884번 : 알람시계 맞추기

2020. 5. 30. 10:36

 

 

2884번 문제는 아래와 같다.

 

 

 

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로 잘못 적었던 부분이었다.

 

이렇게 경우를 나눠서 코드를 짤 경우에는 범위와 해당사항들을 최대한 꼼꼼하게 살펴보고 짜도록 하자.

 

BELATED ARTICLES

more