-
[PCCP 기출문제] 3번 / 아날로그 시계코딩 테스트/Level 2 2024. 8. 13. 07:56반응형
https://school.programmers.co.kr/learn/courses/30/lessons/250135
시간을 다루는 문제에서는 '이상, 초과, 이하, 미만'을 명확히 해주면 좋은데 ㅠ,.ㅠ
~에서 ~까지로 표현하며,
실제로는 코딩을 해서 출제자의 의도를 파악해야하는 경우가 많다.이 경우는 '시작 시간 이상', '종료 시간 이하'로 파악된다.
시, 분, 초침이 완전히 겹치는 경우는
0시 0분 0초인 경우, 12시 0분 0초.
딱 2 경우 밖에 없다.시간이 23시 59분 59초를 초과해서 0시 0분 0초로 돌아가는 경우는 주어지지 않습니다.
라고 했으니 24시 0분 0초는 체크하지 않아도 된다.
1초 단위로 위치를 체크.
초침이 시(분)침 전에 있다가 시(분)침보다 커지는 경우를 체크하고.중간에 12시 0분 0초가 있는 지만 체크하면 될 것이다.
def solution(h1, m1, s1, h2, m2, s2): answer = 0 start_time = h1 * 3600 + m1 * 60 + s1 end_time = h2 * 3600 + m2 * 60 + s2 if start_time == 0 or start_time == 12 * 3600: answer += 1 if start_time < 12 * 3600 <= end_time: answer -= 1 while start_time < end_time: next_time = start_time + 1 h_cur_pos = start_time / 120 % 360 m_cur_pos = start_time / 10 % 360 s_cur_pos = start_time * 6 % 360 h_next_pos = 360 if (temp := next_time / 120 % 360) == 0 else temp m_next_pos = 360 if (temp := next_time / 10 % 360) == 0 else temp s_next_pos = 360 if (temp := next_time * 6 % 360) == 0 else temp if s_cur_pos < h_cur_pos and h_next_pos <= s_next_pos: answer += 1 if s_cur_pos < m_cur_pos and m_next_pos <= s_next_pos: answer += 1 start_time = next_time return answer
반응형