알람 시계
문제는 다음과 같습니다.
문제를 요약하자면
학교에 지각하지 않기 위해 45분 일찍 일어난다고 생각하셔도 무방합니다. 그러기 위해서 알람을 45분 일찍 설정하는 것 입니다.
따라서 입력값은 원래 설정하려는 알람 기준이고 실제 설정 출력 값은 45분전 시간을 출력하게 하면 되는 코드를 작성하면 되는 것 입니다.
키 포인트는 다음과 같습니다.
45분이 일찍 설정하기 때문에 만약 M(분)이 45 이상이라면 단순하게 H(시간), M(분)-45를 출력하면 됩니다.
하지만 만약 45보다 작다면 H(시간)이 -1로 줄게 되죠 또한 0시를 제외하고 모든 시간은 M(분)이 작으면 H(시간)을 -1하면 되지만
0시일 경우에는 -1이 아닌 23시가 출력되도록 해야 합니다.
하지만 0시 일 경우에만 그런 것이니 이중 조건문을 설정 해주면 됩니다.
저의 해답 코드는 다음과 같습니다.
H,M = map(int,input().split())
if M-45 <0:
if H==0:
print(23,60+M-45)
else:
print(H-1,60+M-45)
else:
print(H,M-45)
이 알고리즘을 단계별로 설명해 드리겠습니다
- 먼저 시(H)와 분(M)을 입력받습니다.
- H,M = map(int,input().split())를 통해 공백을 기준으로 두 숫자를 입력받습니다.
- 주요 로직은 현재 시간에서 45분을 뺄 때 발생할 수 있는 두 가지 경우를 처리합니다: a) 첫 번째 경우: M-45가 음수인 경우
if M-45 < 0:
- 이는 현재 분에서 45를 뺐을 때 이전 시간으로 넘어가야 하는 경우입니다.
- 예: 10시 30분 → 9시 45분
else: print(H,M-45)- 단순히 분에서 45를 빼면 되는 경우입니다.
- 예: 10시 50분 → 10시 5분
- 첫 번째 경우에서도 추가로 두 가지 상황을 고려합니다:
if H==0: print(23,60+M-45) else: print(H-1,60+M-45)
- 현재 시간이 0시일 경우: 23시로 변경
- 그 외의 경우: 현재 시에서 1을 뺌
- 분 계산 방법:
- 60+M-45는 이전 시간대의 분을 계산하는 공식입니다.
- 예: 30분에서 45분을 뺄 경우
- 60+30-45 = 45분이 됩니다.
이 알고리즘은 알람 시간을 45분 앞당기는 모든 경우를 정확하게 처리할 수 있습니다
이 문제의 정답 비율은 약 37%입니다.
아마 예외처리 즉 0시 일 때의 기준을 달리 하지 않아 오답 처리 된 코드가 많을 것 같다고 예측합니다.
다음은 공개 된 다른 사람의 오답 코드입니다.
여기서 B >=45인 경우를 보자면 B(분)가 45 이상일 경우에는 A(시간)이 0일 때 처리를 하면 안됩니다.
45분 이상이기 때문에 시간이 차감되지 않죠. 이와 같은 작은 실수로 인해 많은 사람들이 오답 처리 된 거 같습니다.
또한 대부분의 코드가 어떤 목적으로 이루어져있는지 알기 힘든 틀린 코드였습니다. 위 코드는 다른 사람의 공개된 오답 코드입니다. 이 코드는 0시일 때를 처리하지 않아 아마 0시 15분으로 입력값을 받으면 -1 30분으로 출력이 될 것 입니다.
'BaekJoon Reivew' 카테고리의 다른 글
단계별로 풀어보기 백준_2480번 (0) | 2025.02.05 |
---|---|
단계별로 풀어보기 백준_2525번 (0) | 2025.02.05 |
단계별로 풀어보기 백준_14681번 (0) | 2025.02.05 |
단계별로 풀어보기 백준_2753번 (0) | 2025.02.05 |
단계별로 풀어보기 백준_9498번 (0) | 2025.02.03 |