# 문제
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
# 풀이
지난 번 풀이했던 알람 시계 문제 와 같은 시간 계산 문제다.
그땐 45분을 빼주었다면, 이번엔 주어진 시간을 더해주어야 한다.
요리하는 데에 필요한 시간은 0에서 1,000분까지이므로 최대 16시간 40분을 더하는 경우까지 발생할 수 있음을 기억하자.
바로 정답 소스코드를 보도록 하겠다.
#include <iostream>
using namespace std;
int main(){
int h, m, time;
cin >> h >> m >> time;
if(m+time > 59){
h += (m+time)/60;
if(((m+time)%60) == 0) m = 0;
else m = (m+time)%60;
} else m += time;
if(h>23) h -= 24;
cout << h << ' ' << m;
return 0;
}
처음엔 경우를 두 가지로 나누어주었다.
현재 시간의 분(m)과 요리하는 데 필요한 시간(time)을 더했을 때,
1. 시간 값을 별도 계산해야 하는 경우
2. 그렇지 않은 경우
1. m과 time을 더했을 때, 시간 값을 별도 계산해야 하는 경우
이 경우에 시간(h)은 간단하게 계산할 수 있다.
현재시간의 분(m)과 요리하는 데 필요한 시간(time)을 더한 값을 60으로 나누어, 그 몫만 취해주면 된다.
그렇다면 분(m)은? 나머지만 취해주면 된다. 나머지 연산자 % 사용
if(((m+time)%60) == 0) m = 0;
else m = (m+time)%60;
대신 나머지 값이 0이 되는 경우만 고려하여 분 값을 0으로 바꾸어 주면 된다. (time이 모두 시간 값으로 반영된 경우)
2. m과 time을 더했을 때, 시간 값을 별도 계산하지 않아도 되는 경우
이 경우에는 그냥 분 값을 m+time으로 바꾸어주면 끝이다.
+) 마지막으로 고려해야할 것
마지막으로 고려해야할 것은 계산을 끝마친 시간 값이 시간 표현 값을 넘어선 때이다. (0 ≤ 시간 ≤ 23)
앞서 요리하는 데에 필요한 시간은 0에서 1,000분까지이므로 최대 16시간 40분을 더하는 경우까지 발생할 수 있음을 확인했다.
따라서 더하는 시간 값이 24시간을 넘어가는 경우는 없으므로,
if(h>23) h -= 24;
간단하게 계산된 시간 값에서 24시간을 빼주면 된다. (디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다는 점을 기억하자)
>> 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. << 이제 공백을 잊지 말고 출력해주면 끝!
'백준 > C++' 카테고리의 다른 글
[백준] 25314번: 코딩은 체육과목 입니다 | C++ 풀이 (0) | 2023.05.08 |
---|---|
[백준] 2480번: 주사위 세개 | C++ 풀이 (0) | 2023.05.06 |
[백준] 2884번: 알람 시계 | C++ 풀이 (0) | 2023.05.04 |
[백준] 2588번: 곱셈 | C++ 풀이 (0) | 2023.05.03 |
[백준] 1008번: A/B | C++ 풀이 (0) | 2023.05.02 |