[백준 2884] 알람 시계 / 파이썬

권한·2025년 12월 24일

BOJ

목록 보기
6/40

정해진 시간보다 45분 일찍 알람을 맞추는 문제이다.

푸는 방법을 구상해보자면
1. 입력받은 분에서 45만큼 빼고, 음수값이 되면 (분 + 60), (시 - 1) 을 해주면서 시가 음수가 되면 +24를 해준다,
2. total 분으로 바꿔서 45만큼 빼주고 시, 분으로 나누어 준다.

의 루트가 있을 수 있겠다.

H, M = map(int, input().split())
before = 45

M -= before 
if M < 0:
    M += 60
    H -= 1
    """if H < 0:
        H += 24"""
if H < 0:
        H += 24
print(H, M)

💡 if H < 0이 if M < 0의 밖에 있는것과 안에 있는 것이 어떻게 다른가? 후자가 더 효율적이지 않을까?

우선 둘다 입력해보면 전자가 메모리 사용이 더 적다. (백준 입력)
후자의 코드는 메모리가 두 조건을 전체 블록 구조로 저장, 즉 중첩된 스코프를 관리해야 한다.

반면 전자는 조건문 두개가 서로 독립이기에 스코프 추적을 덜 하게 된다.
여기서 스코프 추적이란 '지금 어떤 변수가 어디에 속해있는지'를 관리하고 따라다니는 것이다.

스코프는 변수의 유효범위이다.
따라서 두번째 조건이 '첫번째 조건 = T'일때 의미있는 경우에 중첩if를 사용하는 것이 낫다.
-> 독립적 조건의 경우는 굳이 중첩if가 아닌 그냥 독립적으로 적는게 낫다

profile
티스토리로 옮김

0개의 댓글