def solution(h1, m1, s1, h2, m2, s2):
# h1시 m1분 s1초 => h2시 m1분 s2초
#시작 시간과 끝나는 시간을 초로 환산한다
start = h1 * 3600 + m1*60 +s1 # 330
end = h2 * 3600 + m2*60 +s2 # 420
cnt = 0
# 처음 시간이 0시나 12시인것을 체크해줌
if start==0 or start==43200:
cnt+=1
# 시침 => 30도 도는데 3600초 걸림. 1초에 1/120도 만큼 회전
# 분침 => 30도 도는데 300초 걸림. 1초에 1/10도 만큼 회전
# 초침 => 30도 도는데 5초 걸림. 1초에 6도 회전
while start < end:
rad_h = (start/120) % 360
rad_m = (start/10) % 360
rad_s = (start*6) % 360
next_rad_h = ((start+1) / 120) % 360
next_rad_m = ((start+1) / 10) % 360
next_rad_s = ( (start+1) * 6) % 360
if next_rad_h==0:
next_rad_h=360
if next_rad_m==0:
next_rad_m=360
if next_rad_s==0:
next_rad_s=360
if next_rad_h == next_rad_m == next_rad_s:
cnt += 1
start+=1
continue
if rad_h > rad_s and next_rad_h <= next_rad_s:
cnt+=1
if rad_m > rad_s and next_rad_m <= next_rad_s:
cnt+=1
start+=1
return cnt
12시와 시침, 분침, 초침 사이의 각도로 문제를 접근했다.
각도는 다음과 같이 접근할 수 있다.
# 시침 => 30도 도는데 3600초 걸림. 1초에 1/120도 만큼 회전
# 분침 => 30도 도는데 300초 걸림. 1초에 1/10도 만큼 회전
# 초침 => 30도 도는데 5초 걸림. 1초에 6도 회전
여기서 구한 각도를 활용하면 시침 초침 분침이 만나는 횟수를 구할 수 있다.
시침과 초침, 분침과 초침이 만나는 경우는 다음과 같다.
시침의 각도가 초침의 각도보다 큰 상태에서 1초 후에는 초침의 각도가 더 커지는 경우
분침의 각도가 초침의 각도보다 큰 상태에서 1초 후에는 분침의 각도가 더 커지는 경우
또한, 시침 분침 초침이 같이 만나는 경우도 체크해줘야한다.
주의할 점은 59초에서 0초로 넘어가는 경우 각도가 0도가 되어버리므로 이를 360도로 바꿔서 계산할 필요가 있다.