본문 바로가기
코딩 테스트/[JAVA] 백준

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

by M개발자 2021. 5. 6.
반응형

45분 일찍 알람 설정하기

 

문제 설명

 

원래 설정되어 있는 알람을 45분 앞서는 프로그램을 작성하세요. 

 

스토리텔링


입력 

 

두 정수 H, M이 주어집니다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59)

이것은 처음 설정한 알람 시간 H시 M분을 의미합니다.

 

입력 시간은 24시간 표현을 사용합니다. 

하루의 시작 0 : 0

끝 23 : 59

 

출력 

 

45분 일찍 설정된 알람 시간을 출력합니다.


코드 해석 및 전체 코드 

 

1. m이 45분보다 크거나 같거나 작은지 확인한다.

m의 범위는 0 ≤ M ≤ 59으로 45보다 크거나 같으면 m에서 바로 45분(mi)을 빼준다. 

 

 

45분보다 작을 시 2. h가 0인지 아닌지 확인한다.

45분보다 작으면 h에서 1을 빼야되므로 0시일 시 하루 전인 23시가 된다. 

 

이때 else안에서 h를 1 빼므로 h가 0일 시 24로 변경한다.

23으로 할 시 else-if문 사용을 한다면 m의 값을 구하는 과정이 중복되거나 if안에서 m의 값을 구하지 않으면 else에서 h를 또 1을 빼므로 22시가 된다.

 

mi의 값은 45로 mi에서 m값을 뺀다. → m의 값을 0으로 만드는 효과 

그리고 60에서 mi의 값을 빼므로 두번을 걸쳐 45분을 뺀다. 

0분에서 빼기 때문에 59가 아니라 60에서 빼야 한다.

사실 나도... 쓰면서 이해가 안된다..!! 

ex) 10 : 10 
h -= 1; 10 - 1 9
mi -= m; 45 - 10 35
m = 60 - mi; 60 - 35 25

즉!! m에서 10을 빼면 10 : 00이 된다. 그리고 남은 35분은 9시 59분에서 빼야되므로 60 - 35(mi)를 해주면 10 : 10에서 45분을 뺀 값이 된다. 

 

#include <iostream>
using namespace std;

int main() {
	int h, m;
	int mi = 45;

	cin >> h >> m;

	if (m >= mi) { //1
		m -= mi;
	}
	else {
		if (h == 0) { //2
			h = 24;
		}
		h -= 1;
		mi -= m;
		m = 60 - mi;
        	//m = 60 - (mi-m);
	}

	cout << h << " : " << m;

	return 0;
}

백준 2884번 문제

github

반응형

댓글