백준/C++

[백준] 2525번: 오븐 시계 | C++ 풀이

성실한 당근농부 2023. 5. 5. 19:33

# 문제

훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.

 

 


 

# 풀이

지난 번 풀이했던 알람 시계 문제 와 같은 시간 계산 문제다.

그땐 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분이 된다는 점을 기억하자)

>> 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. << 이제 공백을 잊지 말고 출력해주면 끝!

 

 

 


 

 

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

 

728x90