문제 요약

해당 문제는 여러 테스트케이스를 다루는 문제입니다.

각 테스트케이스에서는 시, 분, 초, 프레임(1 / 100 초)으로 두 시각이 주어집니다. 그리고 해당 시각을 다루는 시계의 반지름이 주어집니다.

이때, 각 “시침”이 지나친 만큼의 영역의 넓이를 구하는 문제입니다.

풀이

해당 문제에서 주의할 점은 (밀리 세컨드)가 주어진 것이 아닌 1/100 s 단위의 프레임이 주어졌음입니다. 또한 시작 지점의 각도가 종료 지점의 각도보다 큰 경우 (00:00을 지난 상황)를 고려해서 작성해야 합니다.

정답 코드

각 과정을 함수로 나누어 처리했습니다.

inp = input()
mii = lambda : [*map(int,inp().split())]
 
def to_tm(h, m, s, ms):
  return (h * 3600 + m * 60 + s) * 100 + ms
 
def tm_to_angle(mili):
  total = 12 * 3600 * 100
 
  return (mili / total) * 360
 
def diff(a, b):
  if a > b:
    return 360 - (a - b)
  return b - a
 
def solve():
  start = tm_to_angle(to_tm(*mii()))
  end = tm_to_angle(to_tm(*mii()))
  radius = fi()
  angle = diff(start, end)
 
  return radius ** 2 * (angle / 360) * pi
 
 
if __name__ == "__main__":
  tc = ii()
  for t in range(1, tc+1):
    ret = solve()
 
    print(f"{t}. {ret:.3f}")

연관 페이지

참고 문헌 / 사이트