5035 : 시계 바늘
•시간제한: 2.000 S
•메모리제한: 256 MB
•제출: 1
•통과: 1
•만든사람: suakii
문제 설명
시계의 중심을 원점 $(0, 0)$이라 할 때, 12시 방향을 $y$축 양의 방향($0^\circ$), 시계 방향으로 각도가 증가한다고 가정합니다.
길이가 $A$인 시침과 길이가 $B$인 분침이 있을 때, 시각 $H$시 $M$분에서 두 바늘의 끝점 사이의 직선 거리를 구하는 프로그램을 작성하십시오.
[시계 바늘의 각도 계산 원리]
• 각도의 기준($0^\circ$): 12시 방향(수직 위쪽)이 $0^\circ$이며, 시계 방향으로 돌면서 각도가 커집니다.
$\implies 12\text{시}(0^\circ) \to 3\text{시}(90^\circ) \to 6\text{시}(180^\circ) \to 9\text{시}(270^\circ) \to 12\text{시}(360^\circ)$
• 분침의 각도: 1시간(60분)에 한 바퀴($360^\circ$)를 돌므로, 1분당 $360^\circ \div 60 = 6^\circ$씩 회전합니다.
$\implies \text{분침 각도} = 6^\circ \times M$
• 시침의 각도: 12시간(720분)에 한 바퀴($360^\circ$)를 돌므로, 1분당 $360^\circ \div 720 = 0.5^\circ$씩 회전합니다.
따라서 $H$시 $M$분을 총 경과 분 단위인 $(60 \times H + M)$분으로 환산한 뒤 $0.5^\circ$를 곱하여 바로 구할 수 있습니다.
$\implies \text{시침 각도} = (60 \times H + M) \times 0.5^\circ$
[두 바늘 사이의 사잇각($\theta$) 구하기: 왜 180°가 넘으면 360°에서 뺄까요?]
원(시계) 전체는 한 바퀴가 $360^\circ$입니다. 시계 위에 두 바늘이 놓이면 원은 항상 '가까운 쪽 각(작은 조각)'과 '등 뒤로 빙 둘러가는 먼 쪽 각(큰 조각)'의 2개로 나뉘며, 두 각의 합은 항상 $360^\circ$가 됩니다.
• 반 바퀴($180^\circ$) 이하일 때: 이미 가까운 쪽을 잰 것이므로 두 각도의 차이 그대로가 사잇각입니다.
• 반 바퀴($180^\circ$)를 넘을 때: 등 뒤로 크게 돌아간 먼 쪽 각도를 잰 것입니다. 따라서 두 바늘 사이의 최단 사잇각은 전체 $360^\circ$에서 큰 각도를 뺀 $360^\circ - \text{차이}$가 됩니다.
※ 예를 들어 9시 정각의 경우:
12시($0^\circ$)에서 시계 방향으로 9시($270^\circ$)까지 빙 둘러가면 차이가 $270^\circ$가 됩니다.
하지만 두 바늘 사이의 지름길(최단 사잇각)은 반대편이므로, $360^\circ - 270^\circ = 90^\circ$(직각)가 됩니다!
[그림으로 이해하는 시계 바늘의 위치와 각도]
[제약 조건]
• 입력되는 모든 값은 정수입니다.
• $1 \le A, B \le 1000$
• $0 \le H \le 11$
• $0 \le M \le 59$
길이가 $A$인 시침과 길이가 $B$인 분침이 있을 때, 시각 $H$시 $M$분에서 두 바늘의 끝점 사이의 직선 거리를 구하는 프로그램을 작성하십시오.
[시계 바늘의 각도 계산 원리]
• 각도의 기준($0^\circ$): 12시 방향(수직 위쪽)이 $0^\circ$이며, 시계 방향으로 돌면서 각도가 커집니다.
$\implies 12\text{시}(0^\circ) \to 3\text{시}(90^\circ) \to 6\text{시}(180^\circ) \to 9\text{시}(270^\circ) \to 12\text{시}(360^\circ)$
• 분침의 각도: 1시간(60분)에 한 바퀴($360^\circ$)를 돌므로, 1분당 $360^\circ \div 60 = 6^\circ$씩 회전합니다.
$\implies \text{분침 각도} = 6^\circ \times M$
• 시침의 각도: 12시간(720분)에 한 바퀴($360^\circ$)를 돌므로, 1분당 $360^\circ \div 720 = 0.5^\circ$씩 회전합니다.
따라서 $H$시 $M$분을 총 경과 분 단위인 $(60 \times H + M)$분으로 환산한 뒤 $0.5^\circ$를 곱하여 바로 구할 수 있습니다.
$\implies \text{시침 각도} = (60 \times H + M) \times 0.5^\circ$
[두 바늘 사이의 사잇각($\theta$) 구하기: 왜 180°가 넘으면 360°에서 뺄까요?]
원(시계) 전체는 한 바퀴가 $360^\circ$입니다. 시계 위에 두 바늘이 놓이면 원은 항상 '가까운 쪽 각(작은 조각)'과 '등 뒤로 빙 둘러가는 먼 쪽 각(큰 조각)'의 2개로 나뉘며, 두 각의 합은 항상 $360^\circ$가 됩니다.
• 반 바퀴($180^\circ$) 이하일 때: 이미 가까운 쪽을 잰 것이므로 두 각도의 차이 그대로가 사잇각입니다.
• 반 바퀴($180^\circ$)를 넘을 때: 등 뒤로 크게 돌아간 먼 쪽 각도를 잰 것입니다. 따라서 두 바늘 사이의 최단 사잇각은 전체 $360^\circ$에서 큰 각도를 뺀 $360^\circ - \text{차이}$가 됩니다.
※ 예를 들어 9시 정각의 경우:
12시($0^\circ$)에서 시계 방향으로 9시($270^\circ$)까지 빙 둘러가면 차이가 $270^\circ$가 됩니다.
하지만 두 바늘 사이의 지름길(최단 사잇각)은 반대편이므로, $360^\circ - 270^\circ = 90^\circ$(직각)가 됩니다!
[그림으로 이해하는 시계 바늘의 위치와 각도]
[제약 조건]
• 입력되는 모든 값은 정수입니다.
• $1 \le A, B \le 1000$
• $0 \le H \le 11$
• $0 \le M \le 59$
입력 설명
정수 $A, B, H, M$ 이 주어집니다.
출력 설명
시침과 분침 끝점 사이의 거리를 출력하십시오.
정답과의 절대 오차 또는 상대 오차가 $10^{-9}$ 이하라면 정답으로 인정합니다.
(출력값을 $X$, 실제 정답을 $Y$라 할 때, $|X - Y| \le 10^{-9}$ 또는 $\frac{|X - Y|}{|Y|} \le 10^{-9}$ 이면 정답 처리됩니다.)
정답과의 절대 오차 또는 상대 오차가 $10^{-9}$ 이하라면 정답으로 인정합니다.
(출력값을 $X$, 실제 정답을 $Y$라 할 때, $|X - Y| \le 10^{-9}$ 또는 $\frac{|X - Y|}{|Y|} \le 10^{-9}$ 이면 정답 처리됩니다.)
입력 예시
COPY
복사되었습니다!
복사되었습니다!
3 4 9 0
출력 예시
COPY
복사되었습니다!
복사되었습니다!
5.000000000000