본문 바로가기

백준 문제풀이/조건문

백준 2884 C / 단계별로 풀어보기 - if문 4

 

안녕하세요.

이번에는 2884 번 알람시계 입니다.

링크는 여기입니다.

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

 

2884번: 알람 시계

문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. 이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 맞추기"이다. 이 방법은 단순하다. 원래 맞춰져있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피

www.acmicpc.net

문제를 읽어보니 너무나 이해가 되는군요.

알람듣고 바로 일어나야 되는데 저도 모르게 알람을 끄고 잔 적이 많네요.

이렇게 알람을 마구 맞춰놓기도 하고... 아침에 일어나는 일은 정말이지 너무 힘든 것 같습니다.

여하튼간에 문제를 풀어봅시다. 우리 상근이를 위해서.

 

45분을 일찍 맞춰야 되는 문제네요.

그럼 생각할 것이 몇 가지 있겠습니다.

일어나야 할 시간이 45분 이후면 45분을 빼주면 되겠네요.

45분보다 일찍이면 1시간을 빼주고, 분에서 60을 더한 뒤 45분을 빼주면 되겠네요.

끝인가요?

 

하나를 더 생각해야 합니다.

0시 0분이 주어질 수도 있다는 말입니다.

그럼 1시간을 빼버리면 -1 시간이 아니라 전날 23시 ~~ 분이 되어야 맞겠네요.

그것까지 감안해서 코드를 짜보겠습니다.

 

#include <stdio.h>

int main()
{
	int h = 0, min = 0;
	scanf("%d %d", &h, &min);
	if (min < 45 && h > 0)
	{
		h--;
		min = min + 60 - 45;
	}
	else if (min < 45)
	{
		h = 23;
		min = min + 60 - 45;
	}
	else
		min -= 45;
	printf("%d %d", h, min);
	return 0;
}

 

저는 이렇게 짜보았습니다.

&& 는 AND 로, 나열한 조건이 모두 충족되어야 if 문 안에 있는 코드가 실행 됩니다.

OR 로는 || 이 있습니다. (여러 가지 중 한 가지라도 충족되면 실행) 역슬래쉬를 shift 키 누르고 누르시면 됩니다.

 

45분보다 일찍이고 시간이 1시간 이상이면 1시간 빼주고, 분은 60분 더한 뒤 45분을 빼줬습니다.

45분보다 일찍인데, 시간이 0시면, 23시로 해주고 분을 계산 해줬습니다.

45분보다 나중인 경우는 단순하게 45분을 빼주면 되겠죠.

 

감사합니다.