Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 시계의 시침과 분침 사이 각도 구하는 프로그램

시(hour)와 분(minute) 두 개의 값이 주어졌을 때, 시침과 분침 사이에 형성되는 더 작은 각도를 구하는 문제입니다.

예를 들어 입력이 hour = 12, minutes = 45라면, 출력은 112.5가 됩니다.

C++로 시계의 시침과 분침 사이 각도 구하는 프로그램

해결 접근 방식

이 문제는 시침과 분침이 각각 얼마나 회전하는지를 이해하면 쉽게 풀 수 있습니다.

  • 분침은 60분 동안 360도를 회전하므로, 1분당 6도씩 움직입니다.

  • 시침은 12시간(720분) 동안 360도를 회전하므로, 1분당 0.5도씩 움직입니다.

이를 바탕으로 다음 단계로 각도를 계산합니다.

  1. 만약 h = 12라면, h := 0으로 설정합니다. (12시는 0시와 같은 위치이기 때문입니다.)

  2. 만약 m = 60이라면, m := 0으로 설정합니다.

  3. 시침의 각도를 계산합니다: hAngle := 0.5 × (60 × h + m)

  4. 분침의 각도를 계산합니다: mAngle := 6 × m

  5. 두 각도 차이의 절댓값을 구합니다: ret := |hAngle − mAngle|

  6. 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도가 되고, 이 중 작은 값인 결과가 산출됩니다.