ให้ hour (1-12) และ minutes (0-59) หา **มุมเล็กที่สุด** (≤ 180°) ระหว่างเข็มนาทีและเข็มชั่วโมง
ตัวอย่าง
hour=12, minutes=30
- Minute Hand: 30 * 6° = 180° (จาก 12)
- Hour Hand: (0 * 30°) + (30 * 0.5°) = 15° (ชั่วโมง 12 = 0, เคลื่อน 0.5°/นาที)
- Diff = |180 - 15| = 165° -> Min(165, 360-165) = 165°
สูตรคำนวณ
minuteAngle = minutes * 6(360°/60 = 6° ต่อนาที)hourAngle = (hour % 12) * 30 + minutes * 0.5(30°/ชั่วโมง + 0.5°/นาที)diff = abs(hourAngle - minuteAngle)result = min(diff, 360 - diff)
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
double angleClock(int hour, int minutes) {
if (hour == 12) hour = 0;
if (minutes == 60) minutes = 0; // Edge case
double hourAngle = 0.5 * (hour * 60 + minutes); // Degrees from 12
double minuteAngle = 6.0 * minutes;
double diff = abs(hourAngle - minuteAngle);
return min(diff, 360.0 - diff);
}
};
Input / Output
Input: 12 30 Output: 165.00000
ความซับซ้อน (Complexity)
- Time: O(1)
- Space: O(1)
จุดสำคัญ
- Hour Hand เคลื่อนที่ **ต่อเนื่อง** (0.5° ต่อนาที) ไม่ใช่กระโดดทีละชั่วโมง
- Normalize Hour: 12 -> 0
- Return Smaller Angle (≤ 180°)
Math Problem แบบตรงไปตรงมา ครับ