백준/C++

[백준] 2884번: 알람 시계 | C++ 풀이

성실한 당근농부 2023. 5. 4. 10:52

# 문제

현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면,

이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

 

 


 

# 풀이

아주 간단한 시간 계산 문제다.우리가 고려해야할 건 딱 두 가지이다.

입력된 시간의 분 값이 45보다 작을 경우, 그리고 이때 시간 값이 0일 경우.

정답 소스코드를 보며 확인해보자.

 

#include <iostream>
using namespace std;

int main(){
    int h, m;
    cin >> h >> m;
    
    if(m >= 45) m -= 45;
    else{
        m += 15;
        if(--h < 0) h = 23;
    }
    
    cout << h << ' ' << m;
    return 0;
}

 

우선 입력된 시간의 분 값이 45보다 클 경우에는 그대로 45분을 빼준 후 출력하면 된다.

 

하지만 45보다 작을 경우에는

1. 입력된 시간 값이 0인지 아닌지를 확인 후 조정

2. 분 계산두 가지의 과정이 필요하다.

이때 분을 계산하는 것은 1을 검사할 필요 없이 공통적인 과정이므로 먼저 실행해보자.

 


 

45보다 작을 경우, 분 계산

입력된 시간이 45보다 작은, 20인 경우를 가정하자.

간단한 계산으로 우리는 45를 뺀 값을 찾을 수 있는데 60 - (45-20) = 35

이는 60 - (45-m), 15+m으로 정리할 수 있다.

 

 45보다 작을 경우, 시간 계산

이때는 입력된 시간 값이 0인지 아닌지를 확인할 필요가 있다.

조금 더 간단하고 구현을 위해 전위 연산자를 사용하였다.

 if(--h < 0) h = 23;

시간계산을 적용한 값이 0보다 작아질 경우의 값만 23으로 변경하고 출력하면 끝!

이때 입력과 같은 형태로 출력하면 된다고 하였으니, 시간과 분 사이의 공백을 잊지 말자.

 

 

 

 


 

 

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

 

728x90