본문 바로가기
코딩/백준

[C언어] 백준 BOJ 2884 알람시계

by 김두루미 2022. 7. 3.
반응형

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

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

문제 설명

백준의 문제 - 단계별로 풀어보기의 [조건문] 의 2884 알람시계 문제입니다.

 

상근이는 지각을 하지 않기 위해 "45분 일찍 알람 설정하기"를 한다고 합니다. 상근이가 설정한 알람 시각에서 항상 45분을 뺀 값을 설정(출력) 하면 됩니다.

 

10시 50분 → 10시 5분
23시 45분 → 23시 0분

입력 받은 분이 45분 이상인 경우 시간에서 60분을 빌려올 필요가 없으므로, 분에 45만 빼면 됩니다.

10시 10분 → 9시 25분
23시 40분 → 22시 55분

위의 경우는 분이 45분보다 작은 경우이므로, 시간에서 60분을 빌려와 분에 60분을 더한 후 45분을 빼면 됩니다. 60분을 더하고 45분을 빼도 되지만, 결국 더하고 빼므로 15분만 더해도 됩니다.

0시 30분 → 23시 45분

마지막 경우는 두 번째처럼 분이 45분보다 작아, 시간에서 60분을 빌려오지만, 시간도 0시 이므로 -1시가 아닌 23시가 되어야합니다.

 

이러한 경우의 수를 적용하면 아래의 코드가 나옵니다.

코드 (C언어)
#include<stdio.h>

int main(void)
{
	int hour, min;
	
	scanf("%d%d", &hour, &min);
	
	if(min >= 45)		//첫 번째 경우 
	{
		min -= 45;		//min = min - 45;와 동일 
	}
	else				//분이 45분보다 작은 경우 
	{
		if(hour > 0)	//두 번째 경우 
		{
			hour -= 1; 	//hour = hour - 1; 과 동일 
		}
		else			//세 번째 경우 
		{
			hour = 23;
		}
		min += 15;		//min = min + 60 - 45;와 동일 
	} 
	
	printf("%d %d", hour, min);
	
	return 0;
}

 

반응형