🔗 Problem Link
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
❔Thinking
- 아날로그 시계에서, 초침이 주어진 시간 범위 내에서의 시침 또는 분침과 일치하는 횟수를 반환한다.
- 두개의 바늘이 겹친다는 의미는, 하나의 바늘이 1초 후에 다른 바늘보다 앞선다는 뜻과 동일하다.
- 00시와 12시는 모든 바늘이 겹치는 구간이기 때문에, 정확히 예외처리를 해야 한다.
💻Solution
def solution(h1, m1, s1, h2, m2, s2):
cnt = 0
init_time = h1*60*60 + m1*60 + s1
end_time = h2*60*60 + m2*60 + s2
if init_time == 0 or end_time == 60*60*12:
cnt += 1
for t in range(init_time, end_time):
s_angle = (6*t) % 360
m_angle = (t/10) % 360
h_angle = (t/120) % 360
next_s_angle = 360 if (6*(t+1)) % 360 == 0 else (6*(t+1)) % 360
next_m_angle = 360 if ((t+1)/10) % 360 == 0 else ((t+1)/10) % 360
next_h_angle = 360 if ((t+1)/120) % 360 == 0 else ((t+1)/120) % 360
if s_angle < h_angle and next_s_angle >= next_h_angle:
cnt += 1
if s_angle < m_angle and next_s_angle >= next_m_angle:
cnt += 1
if next_s_angle == next_m_angle == next_h_angle:
cnt -= 1
return cnt
🗝️keypoint
- 두 바늘의 일치를 각도나 시간으로 계산하지 않고, '지나가는 지점이 있으면'이라는 기준으로 판단하는 것이 중요하다.
- 만약 바늘이 1초 후에 정각을 가르키면 각도가 0도가 되기 때문에, 이 부분에 대한 예외 처리가 중요하다.
'코딩테스트 > Python' 카테고리의 다른 글
[LeetCode] 643. Maximum Average Subarray I (0) | 2025.04.10 |
---|---|
[LeetCode] 283. Move Zeroes (0) | 2025.04.07 |
[LeetCode] 443. String Compression (0) | 2025.03.26 |
[LeetCode] 238. Product of Array Except Self (0) | 2025.03.24 |
[LeetCode] 345. Reverse Vowels of a String (0) | 2025.03.19 |