반응형
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;
}
반응형
'코딩 테스트 > [JAVA] 백준' 카테고리의 다른 글
[JAVA] 백준 1373번 2진수 8진수 (0) | 2022.03.15 |
---|---|
[JAVA] 백준 8674번 Tabliczka (0) | 2022.03.10 |
[JAVA] 백준 5893번 17배 (0) | 2022.03.10 |
[JAVA] 백준 14623번 감정이입 (0) | 2022.03.10 |
[2588] 곱셈 / 백준 baekjoon 2588번 곱셈 | C++ (0) | 2021.05.04 |
댓글