본문 바로가기

Algorithm Problems/구현

[백준/C++] 8989번: 시계

문제

https://www.acmicpc.net/problem/8989

 

8989번: 시계

기원이의 방에는 시침과 분침으로 이루어진 아날로그 시계가 있다. 기원이는 시침과 분침이 형성하는 각도 중 작은 각도를 측정하는 것이 취미이며, 이 각도는 0보다 크거나 같고 180보다 작거나

www.acmicpc.net


문제 요약

서로 다른 5개의 시간이 hh:mm 형태로 주어졌을 때, 중간값을 갖는 각도가 몇 시인지 출력한다.

+ 각도는 시침과 분침이 형성하는 각도 중 작은 각도이다.

 

즉, 주어진 시간들이 이루는 각도를 기준으로 오름차순 정렬했을 때, 세 번째에 위치한 시간을 찾으면 된다.

+ 동일한 각도를 갖는 시간들이 있으면, 빠른 시간 순서대로 정렬한다.


코드

#include <iostream>
#include <vector>
#include <tuple>
#include <string>
#include <algorithm>

#define MAX_N 100000

using  namespace std;


int T;

double time_angle(string str) {
    int hour = (str[0] - '0') * 10 + (str[1] - '0');
    if (hour >= 12) hour -= 12;

    int min = (str[3] - '0') * 10 + (str[4] - '0');
    
    double hour_angle = hour * 30 + min * 0.5;
    double min_anlge = min * 6;

    double res_angle = abs(hour_angle - min_anlge);

    if (res_angle > 180) {
        res_angle = 360 - res_angle;
    }

    return res_angle;
}

int main() {
    cin >> T;

    for (int t = 0; t < T; t++) {
        vector<tuple<double, string>> arr;

;       for (int i = 0; i < 5; i++) {
            string str;
            cin >> str;
            arr.push_back({ time_angle(str), str });
        }
        
         sort(arr.begin(), arr.end());

        double angle;
        string str;
        tie(angle, str) = arr[2];

        cout << str << "\n";

    }

    return 0;
}

 


코드 설명

hh:mm 형식의 시간 정보를 인자로 받고 각도를 반환하는 함수 time_angle을 정의한다.

 

1. string형 hh와 mm을 아스키코드를 이용하여 int형으로 변환한다.

(각도 정보만 필요하므로, 12시 이상의 hh정보는 0시~ 11시로 치환한다.)

 

2. 시침의 각도는 0시 기준에서 1분마다 0.5도씩 이동한다. (1시간에 30도씩 이동)

 

3. 분침의 각도는 0분 기준에서 1분마다 6도씩 이동한다.

 

4. 시침과 분침의 각도 차를 절댓값으로 구하고, 그 차이가 180도 이상이라면 큰 각도이므로, 360을 빼서 작은 각도를 구한다.

 

위 과정으로 구한 각도를 hh:mm형식의 string과 함께 튜플로 묶어서 vector에 저장하고, sort 함수를 이용하여 정렬한다.

 

마지막으로, vector의 세번째 시간을 출력한다. 

'Algorithm Problems > 구현' 카테고리의 다른 글

[백준/C++] 4447번: 좋은놈 나쁜놈  (0) 2024.04.15
[백준/C++] 1718번: 암호  (1) 2024.04.06
[백준/Python] 17300번: 패턴  (1) 2024.01.06
[백준/Python] 23349번: 졸업 사진  (0) 2024.01.01
[백준/Python] 1969번: DNA  (1) 2023.11.20