[백준] 2844번 : 알람 시계 - [C++]
- 문제
이 번 문제는 약간 고려해야 할 점이 몇 개 있다.
24시간 표현법으로 표현해야한다는 점과, 00시가 아닌 0으로 표현한다는 점이다. 이 점을 유의하여 풀이해보도록 하자.
- 알고리즘 [접근 방법]
어려운 문제는 아니다. 현재 받은 수에서 45분 전을 구하면 되는 문제라...
다만, 주의해야 할 점은 0시 보다 아래 시간은 음수가 아니라 23시라는 것은 당연하지만, 이 부분을 고려하지 못하고 그냥 풀었을 수도 있기에 미리 언급하고 간다.
가장 쉬운 알고리즘으로는
입력받은 분(minute) 을 45 기준으로 45보다 작으면 시(hour)을 -1 해주고 아닐경우 입력받은 분(minute)에 -45 를 해주면 된다.
또한 시(hour)가 0보다 작아질 경우 시(hour) 을 23으로 수정해준다.
즉, 아래와 같이 조건문을 나누면 된다.
1-1 단계 : 45분보다 작은지 여부 - if (min < 45)
2-1 단계 : 시(hour) 가 0보다 작은지 여부 - if (hour < 0)
1-2 단계 : 1단계 조건 외 여부 - else
일단, 1-1단계에서 입력으로 들어온 분(min)이 45보다 작을 경우 이는 min-45를 하면 음수가 된다는 말이다.
이 때는 1시간을 빼주고, 1시간은 60분이니 (45-입력값) 의 차이만큼 60에서 빼주면 된다. 쉽게 말해서 60-(45-min)을 해주면 된다.
그리고 2-1단계에서 만약 앞선 1-1단계에서 1시간을 뺐는데, 음수가 된 경우 23시로 시간을 바꿔주어야 한다.
그 외의 경우에는 시간은 그대로, 분은 min-45를 출력해주면 된다.
- 1가지 방법을 사용하여 풀이한다.
따로 다룰 것은 없어 오늘은 간단하게 위의 알고리즘으로 풀이한 것만 보도록 하자.
1. 조건문
- 풀이
- 방법 1 : [조건문]
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
int h; // 시
int m; // 분
cin >> h >> m;
// 만약 입력받은 분이 45분 미만일 경우
if (m < 45) {
h--;
m = 60 - (45 - m);
// 만약 시(hour)가 음수가 될 경우
if (h < 0) {
h = 23;
}
} else {
m = (m - 45);
}
cout << h << " " << m;
return 0;
}
가장 기본적인 방법이라 할 수 있겠다.
그리 어려운 문제는 아니라 다들 쉽게 풀었을 것이다.
- 성능
채점 번호 : 27319468 - 방법 1
- 정리
이 번 문제를 끝으로 if문 카테고리는 끝났다.
다음 카테고리는 반복문으로 for문과 while문을 다루게 될 예정이다.
'C++ - 백준 [BAEK JOON] > 조건문' 카테고리의 다른 글
[백준] 2480번 : 주사위 세개 - [C++] (0) | 2022.08.05 |
---|---|
[백준] 2525번 : 오븐 시계 - [C++] (0) | 2022.07.24 |
[백준] 1468번 : 사분면 고르기 - [C++] (0) | 2021.03.11 |
[백준] 2753번 : 윤년 - [C++] (0) | 2021.03.09 |
[백준] 9498번 : 시험 성적 - [C++] (6) | 2021.03.02 |