728x90
백준 2884번: 알람 시계
📌 문제
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.
이런 상근이를 불쌍하게 보던 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 설정하기"이다.
이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.
현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 알람 시간 H시 M분을 의미한다.
입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.
출력
첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)
📝 문제 접근 방법
- 분 단위 계산
- 현재 분(M)에서 45분을 빼는 방식으로 계산합니다.
- 만약 현재 분(M)이 45보다 작아서 음수가 되는 경우 이전 시(hour)로 넘어가야 하므로 시(H)에서 1을 빼주고 분(M)은 60분을 더한 값으로 계산합니다.
- 시간 조정
- 분이 음수가 되는 경우 시(hour)를 1시간 이전으로 설정합니다.
- 하루의 시간은 0 ~ 23 사이이므로 시(hour)가 0보다 작아질 경우 23시로 설정합니다.
👩💻 나의 답안
h, m = tuple(map(int, input().split()))
h = (h - 1) % 24 if m < 45 else h
m = (m - 45) % 60
print(h, m)
- 모듈러 연산(%)을 사용하여 시간이 음수가 될 경우에도 24시간 또는 60분 단위로 순환시켜, 계산된 값이 항상 하루 시간 범위 내에 유지되도록 합니다.
✨ 새로 알게 된 점
1. 모듈로 연산 (Modulo Operation, Mod)
한 숫자를 다른 숫자로 나눈 후 나눗셈의 나머지를 반환합니다.
짝수 및 홀수 판별: 어떤 수 n에 대해 n % 2가 0이면 짝수이고 1이면 홀수입니다.
배수 여부 확인: 어떤 수 a가 b의 배수인지 확인하려면 a % b가 0인지 확인하면 됩니다.순환 구조에서의 활용: 인덱스를 순환시키는데 유용하게 사용할 수 있습니다.
주기성을 가진 계산: 모듈로 연산은 주기성을 가지므로 일정 범위 내에서 반복적으로 순환하는 계산에 자주 사용됩니다.
원형 큐(Circular Queue) 구현: 원형 큐는 고정된 크기의 큐에서 인덱스가 마지막 요소를 넘어가면 다시 처음으로 돌아가야 할 때 사용됩니다. 이때 모듈로 연산을 통해 마지막 인덱스를 넘어서는 경우 첫 번째 인덱스로 순환할 수 있습니다.
728x90
반응형
'코딩테스트 대비' 카테고리의 다른 글
[파이썬(Python)] 백준 25314번 코딩은 체육과목입니다 (0) | 2024.11.06 |
---|---|
[파이썬(Python)] 백준 2525번 오븐 시계 (0) | 2024.11.06 |
[파이썬(Python)] 백준 10172번 개 (0) | 2024.11.05 |
[백준] 10171번 고양이 파이썬(Python) (0) | 2024.11.01 |
[파이썬(Python)] 백준 2588번 곱셈 (0) | 2024.10.22 |