시(hour)와 분(minute) 두 개의 값이 주어졌을 때, 시침과 분침 사이에 형성되는 더 작은 각도를 구하는 문제입니다.
예를 들어 입력이 hour = 12, minutes = 45라면, 출력은 112.5가 됩니다.

해결 접근 방식
이 문제는 시침과 분침이 각각 얼마나 회전하는지를 이해하면 쉽게 풀 수 있습니다.
분침은 60분 동안 360도를 회전하므로, 1분당 6도씩 움직입니다.
시침은 12시간(720분) 동안 360도를 회전하므로, 1분당 0.5도씩 움직입니다.
이를 바탕으로 다음 단계로 각도를 계산합니다.
만약
h = 12라면,h := 0으로 설정합니다. (12시는 0시와 같은 위치이기 때문입니다.)만약
m = 60이라면,m := 0으로 설정합니다.시침의 각도를 계산합니다:
hAngle := 0.5 × (60 × h + m)분침의 각도를 계산합니다:
mAngle := 6 × m두 각도 차이의 절댓값을 구합니다:
ret := |hAngle − mAngle|ret과(360 − ret)중 더 작은 값을 반환합니다. 두 바늘 사이에는 항상 두 개의 각도가 존재하며, 그중 작은 쪽이 정답이기 때문입니다.
C++ 구현 예제
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
double solve(int h, int m) {
if(h == 12) h = 0;
if(m == 60) m = 0;
double hAngle = 0.5*((60 * h) + m);
double mAngle = 6 * m;
double ret = abs(hAngle - mAngle);
return min(360 - ret, ret);
}
};
main(){
Solution ob;
cout << (ob.solve(12, 45));
}입력
12, 45
출력
112.5
코드 설명
solve() 함수는 먼저 경계값(12시, 60분)을 처리한 뒤, 시침과 분침의 각도를 각각 계산합니다. 두 각도의 차이를 절댓값으로 구하고, min(360 - ret, ret)을 통해 두 바늘 사이의 작은 각도를 반환합니다. 위 예제에서 12시 45분일 때 시침은 약 362.5도(즉, 2.5도 위치), 분침은 270도 위치에 있으므로 두 각도 차이는 92.5도 또는 267.5도가 되고, 이 중 작은 값인 결과가 산출됩니다.