단계별로 풀어보기 : 백준/조건문

[백준] 2884번 알람시계 - Python(파이썬)

seunjang 2025. 7. 10. 20:00
728x90

✅  문제 링크

아래 링크를 통해 문제 페이지로 이동할 수 있습니다.

📎 백준 2884번 알람시계

 

✅  문제 설명

728x90

✅  문제 풀이

문제를 해결하기 위해 두 가지 큰 경우로 나누어 생각하면 쉽습니다.

Case 1: 분(M)이 45분 이상일 경우 (간단한 경우)
이때는 시(H)가 바뀔 일이 없습니다. 단순히 분(M)에서 45를 빼주기만 하면 됩니다.

  • 예: 10시 50분 → 10시 (50 - 45)분 → 10시 5분

Case 2: 분(M)이 45분 미만일 경우 (복잡한 경우)
이 경우, 분(M)에서 45를 빼면 음수가 되므로 '시(H)'에서 1시간(60분)을 빌려와야 합니다.

  1. 시(H) 처리: 시(H)는 1시간 줄어듭니다.
  2. 분(M) 처리: 분(M)에는 60분을 더한 뒤, 45분을 뺍니다. 즉, M + 60 - 45 가 새로운 분이 됩니다.
  • 예: 10시 30분 → (10 - 1)시 (30 + 60 - 45)분 → 9시 45분

⚠️ 여기서 중요한 경계값(Edge Case)!
만약 시(H)가 0시일 때 1시간을 빼면 어떻게 될까요? 0시에서 1시간 전은 -1시가 아니라 23시입니다.

이 예외 상황을 처리해주는 if문이 추가로 필요합니다.

 

✅  정답 코드

# 시(H)와 분(M)을 한 줄에 입력받아 정수로 변환합니다.
H, M = map(int, input().split())

# M이 45분 이상인지 미만인지에 따라 분기합니다.
if M >= 45:
    # Case 1: 45분 이상이면 분(M)만 빼줍니다.
    M = M - 45
else:
    # Case 2: 45분 미만이면 시(H)에서 1시간을 빌려옵니다.
    H = H - 1
    M = M + 60 - 45

    # 경계값 처리: H가 음수가 되면 23시로 바꿔줍니다.
    if H < 0:
        H = 23

# 결과를 출력합니다.
print(H, M)

 

728x90