문제 요약
해당 문제는 여러 테스트케이스를 다루는 문제입니다.
각 테스트케이스에서는 시, 분, 초, 프레임(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}")