초보 개발자의 이야기, 릿허브

[C++] 백준 2884번 알람 시계 본문

코딩테스트/📗 백준 (BOJ)

[C++] 백준 2884번 알람 시계

릿99 2021. 12. 16. 09:08
728x90
반응형
1. 문제이해

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

 

2884번: 알람 시계

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

www.acmicpc.net

 

상근이가 설정한 알람시간(H시 M분)이 주어질 떄, 창영이의 방법을 적용했을 때

설정해야 하는 알람 시간을 출력하는 것이 목표이다.

 

 

 

2. 문제풀이

 

창영이의 방법을 사용하게 되면, 상근이가 설정한 시간보다 45분 일찍 알람을 설정해야 한다.

예를 들어, 상근이가 설정한 시간이 11시 40분일 경우,

창영이의 방법을 적용하면, 10시 55분에 알람을 설정해야 한다는 뜻이다.

주어진 단위가 시간인 만큼 코드를 짤 때 주의해야 할 경우와 그에 대한 풀이방법은 다음과 같다.

 

 

1. 시간과 분이 모두 바뀌는 경우

: 11시 40분처럼, 45분 이전의 시간이 시간과 분 모두 바뀌는 경우(10시 55분)가 위의 예이다.

40분보다 5분(45 - 40) 더 일찍 설정해야 하므로, 시간을 11 - 1 = 10, 분을 60 - 5 = 55 해주어야 한다.

이 경우, (상근이가 설정한 분 - 45 < 0) 이므로,

새로 설정할 알람 시간 = 상근이가 설정한 시간 - 1

새로 설정할 알람 분 =  60 - (45 - 상근이가 설정한 분)

이 된다.

단, 예를 들어 0시 30분처럼, 단순히 시간이 -1되는 경우가 아닌 경우 (23시 45분) 에는

특별한 예외를 두어 (상근이가 설정한 분 - 45 < 0) 이고, 상근이가 설정한 알람시간 = 0 인 경우,

새로 설정한 알람 시간 = 23시 로 설정해준다.

 

 

2. 분만 바뀌는 경우

: 11시 45분처럼, 45분 이전의 시간이 분만 바뀌는 경우 (11시 0분)가 위의 예이다.

45분을 상근이가 설정한 분에서 빼주어도 시각이 바뀌지 않으므로 분만 45 - 45 = 0 해주면 된다.

이 경우, (상근이가 설정한 분 - 45 >= 0) 이므로,

새로 설정할 알람 시간 = 상근이가 설정한 시간

새로 설정할 알람 분 = 상근이가 설정한 분 - 45

이 된다.

 

 

작성한 소스코드는 아래와 같다.

 

 

 

3. 소스코드
#include <iostream>
using namespace std;

int main() {
	int hour, minute;

	cin >> hour >> minute;
	// 1. 시간과 분이 모두 바뀌는 경우
	if (minute - 45 < 0) {
		// 상근이가 설정한 알람시간 = 0 인 경우
		if (hour == 0) {
			hour = 23;
			minute = 60 - (45 - minute);
		}
		// 그 외의 경우
		else {
			hour = hour - 1;
			minute = 60 - (45 - minute);
		}
	}
	// 2. 분만 바뀌는 경우
	else {
		minute = minute - 45;
	}

	cout << hour << " " << minute;

	return 0;
}

상근이가 설정한 알람 시간(hour), 분(minute)을 입력받는다.

이후, 2. 문제풀이에서 도출한 풀이방식을 그대로 적용 후 출력해주면 된다.

 

1. 시간과 분이 모두 바뀌는 경우 (상근이가 설정한 분 - 45 < 0) 

: 상근이가 설정한 알람시간 = 0 인지 확인, 맞다면 새로 설정한 알람 시간 = 23시 로 설정하고

새로 설정할 알람 분 =  60 - (45 - 상근이가 설정한 분) 으로 설정

만약, 상근이가 설정한 알람시간이 0 이 아니면,

새로 설정할 알람 시간 = 상근이가 설정한 시간 - 1

새로 설정할 알람 분 =  60 - (45 - 상근이가 설정한 분)

 

2. 분만 바뀌는 경우 (상근이가 설정한 분 - 45 >= 0) 

새로 설정할 알람 분 = 상근이가 설정한 분 - 45 만 해주면 된다.

 

 


문제에 대한 질문과 지적은 언제나 환영입니다.😊

 

 

 

 

728x90
반응형