개발자/C or C++

[백준] 2884번

Mosser 2021. 10. 4.
728x90
반응형

문제

해결 방법

이 문제는 if 문을 이용하여 조건에 맞게 푸는 문제입니다.

제가 생각한 방식은 우선, 입력값에서 시간은 제외하고 분을 기준으로 문제를 풀었습니다.

1. 만약 분의 값이 45 이상이라면 답은 간단하게 시간은 그대로 출력하고 분은 45분을 뺀 값을 출력하면 됩니다.

2. 그렇지 않고 분이 45분 미만 이라면 원래 분에서 45분을 빼면 시간의 값도 -1이 되고 분의 값도 음수가 되기 때문에 -1을 곱한 후, 60분에서 -1을 곱한 분의 값을 빼서 현재 시간과 분을 출력해주면됩니다.

여기서 주의할 점은 0시나 60분일 경우를 예외처리를 잘 해주어야 합니다. 0시에서 1시간을 빼면 23시가 되고 60분 같은 경우 0으로 표현해야 합니다.

#include <iostream>
using namespace std;
int main(){
    int hour,minute;
    cin>>hour>>minute;

    if((hour<0 || hour>24)||(minute<0 || minute>59))
        return 0;

    if(minute>=45){  //분이 45분 이상일 경우 45분을 빼고 출력 하면 답!
        cout<<hour<<" "<<minute-45<<endl;;
        return 0;
    }else{
        minute-=45;   //분이 45분 미만일 경우 우선 기본 값에서 45분을 뺀다.
        minute*=-1;  // 45분을 빼면 음수 값이 나오기 때문에 -1을 곱하여 양수로 바꾼다.
        minute=60-minute; //바꾼 값의 분을 계산하기위해 60분에서 바뀐 분의 값을 뺀다.
        if(minute==60)  //이때 값이 60분이라면 출력을 위해서 0으로 바꾼다.
            minute=0;
        if(hour==0){ //만약 시간이 0시라면 45분을 뺄경우 23시로 바뀌기 때문에 예외처리
            hour=23;
        }else{  //시간이 0시가 아니라면 단순히 시간만 -1을 한다.
            hour-=1;
        }
        cout<<hour<<" "<<minute<<endl;;
        return 0;
    }
}

반응형

'개발자 > C or C++' 카테고리의 다른 글

[백준] 2739번 [C/C+]  (0) 2021.10.04
[백준] 10817번  (0) 2021.10.04
[백준] 2753번  (0) 2021.10.04
[백준] 9498번  (0) 2021.10.03
[백준] 1330번  (0) 2021.10.03

댓글