본문 바로가기
DEV/백준 알고리즘

백준 알고리즘 2884번(파이썬)

by 올커 2022. 9. 19.

 

백준 2884번_파이썬 알고리즘

Q. 백준 2884. 알람시계

상근이는 알람을 맞춰놓고도 지각을 한다. 이를 본 창영이는 "45분 일찍 알람 설정 하기"를 추천해주었다. 이는 원래 설정되어 있던 알람을 45분 앞선 시간으로 조정하는 것이다. 현재 설정한 알람 시각이 주어졌을 때, 이를 언제로 조정해야 하는지 구하는 프로그램을 작성
(1) 입력 : 첫째 줄에 알람시간 H, M을 입력받는다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59; H, M은 정수)
               입력시간은 24시간 표현을 사용하며, 하루의 시작시간은 0:0(자정), 끝은 23:59이다.
(2) 출력 : 설정해야 하는 알람시간을 계산하여 출력해준다.


A. 풀이

 - 문제를 이해하고, 시간에 대한 개념을 다시 숙지하고 알고리즘을 짜야 한다.

# Q 백준 2884, 알람 시계 ★★
h, m = map(int, input().split())

if m < 45:
    if h == 0:
        h = 23
        m += 60
    else:
        h -= 1
        m += 60

print(h, m-45)

1) 변수 선언부

 - 먼저 맞추고자 하는 시간, 분을 입력받아야 한다. 2개의 변수를 입력받고 정수로 사용해야 하기 때문에 'map(int, input().split())'을 사용했다.

 - 입력받은 시각은 시는 'h'라는 변수에 정수형태로, 분은 'm'이라는 변수에 정수형태로 각각 입력된다.

 

2) 조건문(if문)

 - 먼저 알람시간을 어떻게 변경할 것인지 인지해야 한다. 문제에서는 입력받은 시간에서 45분 앞선 시간으로 조정한다고 하였다. 그렇기 때문에 입력받은 분이 45분보다 클 경우, 그렇지 않은 경우로 나누어 알고리즘을 짜야 한다.

 - 사실 입력받은 분, 'm'이 45보다 큰 경우는 45를 그냥 뺄셈하면 되기 때문에 크게 문제되지 않는다. 그래서 조건문은 m이 45보다 작은경우를 큰 틀로 잡았다.

 - 먼저 입력받은 분의 값 'm'이 45보다 작을 경우, 입력받은 시, 'h'에서 1을 제해주어야 한다. 이 때, 또 하나의 개념을 생각해야 하는 것이, 입력받은 시가 00시 일 때이다. 00시에서 1시간을 빼면 23시로 변경해주는 조건문을 짜기 위해 아래와 같이 코드를 작성하였다. 시간은 -1을 하여 23시가 되었고, 분은 시간을 1시간 뺐기 때문에 여기서 60을 더해줬다.

 - 사실 풀이의 차이지만, 여기서 분인 m값에 45까지 빼주어도 상관없다. 하지만 시간에 대한 셋팅을 먼저 하고 분에 대한 계산을 나중에 한다고 개념을 잡고 시작했기 때문에 여기서는 미리 빼주지 않았다.

if m < 45:
    if h == 0:
        h = 23
        m += 60

 - 시간 'h'가 00시가 아닐 경우에도 m이 45보다 작을 때에는 마찬가지로 시간에서는 1시간을 빼주어야 한다.

    else:
        h -= 1
        m += 60

 

3) 출력

 - 앞서 시간 셋팅을 해주었기 때문에 이제 알람을 조정하여 출력해주는 개념이다. 시간은 계산이 되었으니 그대로 두고 분에서 45분을 빼주면서 아래와 같이 출력해준다.

print(h, m-45)

R. 리뷰

 - 알고리즘 문제를 해결할 때에는 코드를 잘 짜는것도 물론 스킬적으로 중요하지만, 좋은 방향을 찾고, 빠르게 풀기 위해서는 문제 이해 또한 많이 중요하다.

 - 이 문제에서는 시간에 대한 개념이 많이 들어가있다. 시는 24시간, 분은 60분이라는 Rule에 대해 이해하고, 이 안에서 덧셈, 뺄셈을 자유롭게 할 수 있도록 해야 한다.

 - 역시 조건문 if를 사용할 때에도 예외없이 전체를 포괄할 수 있는지, 케이스별로 누락은 없는지 꼼꼼히 확인하는 것이 매우 중요하다.

 

 

반응형

댓글