백준 [2525] (C++) {상세알고리즘}

2023. 4. 30. 20:36백준문제풀이

#include<iostream>


using namespace std;

//의사코드 :  현재시각이 12시 30분일때, 40분을 더하게되면   13시 10분이됨 , 이를 문법으로 변경
// 먼저 분부터 계산하기위해 현재의 minute(30) 을 60 으로 나머지연산해주면 종료시각의 분이됨
//그렇게되면 hour는 증가해야하는데
//분= 나머지연산자로 나머지를 분에 대입
//시 =  나누기로 몫을 시에대입


int main() {

    int hour, minute, time;
    cin >> hour >> minute >> time;  //현재시간:  hour(0~23) , 현재분: minute(0~59) , time은 더해야할 값(분) 


    minute = minute + time % 60; // 현재분 에 입력받은 분(60) 을 더해줌, 나머지연산자 사용

 

요리시간을 60으로 나눈 나머지를 더해주는 이유 :  1시간10분에서 60을 더하면 2시간 10분이됨
혹은 1시간 40분에서 30을 더하면 2시간 10분이될때,  minute에는 나머지인10이더해짐

 

        hour = hour + time / 60;

나머지연산자, 나누기는 +보다 우선순위가높음

 

 더해야할분만큼 60으로 나눈 "몫" 을 "시간"에 더해야하기때문에 나누기연산자사용


현재 시각이 14시 30분이고, 요리 시간이 90분(1시간 30분)이라면, 
요리가 끝나는 시간을 계산하기 위해서는 현재 시각에 90분을 더해야 함

먼저, 더해야할 90분을 60으로 나눈 몫인 1을 현재 시각의 시간에 더해줌
따라서, hour += time / 60; 코드를 수행하면 hour 변수에 14 + 1 = 15가 저장

 

 


        if (minute >= 60) {
            hour = hour + 1;
            minute = minute - 60;
        }
    if (hour >= 24) {
        hour = hour - 24;
    }
    cout << hour << " " << minute << endl;

    return 0;
}

시간과 분에대한 문제를 많이접하는데 이러한 패턴을풀때 쓰게되는 코드들을 조금씩암기하거나 외워두면 편할것같다. 

나머지연산자와 나누기를 사용하게되는데, 나머지연산자는 분에(분의 나머지) 가   그대로 더해진값의 분이되고,

나누기값은 시에(나누고난 몫) 으로 계산되기때문에  이러한 패턴을 암기해놓자 

'백준문제풀이' 카테고리의 다른 글

백준[10951] (Java)  (0) 2023.05.02
백준 [10811] (Java)  (0) 2023.05.02
백준[5597] (Java)  (0) 2023.04.27
백준 [11022] (Java)  (0) 2023.04.27
백준[2884] 마이너스알람 (Java)  (0) 2023.04.12