본문 바로가기

Algorithm/Implementation

(C++) - LeetCode (easy) 539. Minimum Time Difference

반응형

https://leetcode.com/problems/minimum-time-difference/description/?envType=daily-question&envId=2024-09-16

시계의 분 차이를 계산하는 구현문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 각 timePoint를 분으로 환산한 vector minutes를 선언 후 해당 문자열로 분으로 환산하는 getTotalMinute를 timePoints별로 수행해 minutes에 저장합니다2. minutes를 오름차순으로 정렬해줍니다. 이로써 이웃한 시간간의 차이가 최소화 됩니다. 3. 정답 변수 minDiff를 선언 후 int max값으로 저장합니다.(약 10억)

📔 풀이과정

1. minutes의 원소를 돌며 다음을 수행합니다.  1-1. minDiff에 minutes의 이웃 원소간의 최소를 구해줍니다.2. minutes의 첫 번째 원소는 현재 날로부터 지난 분으로 계산될 수도 있으나 다음 날로부터 지난 시간으로도 계산 될 수 있습니다. 따라서 다음 날로부터 minutes[0]만큼 지난 값을 nextDay에 저장해주고 nextDay - 현재날의 마지막 분값을 지역변수 circularDiff에 저장해 minDiff와의 최솟값을 갱신해줍니다.

📔 정답 출력 | 반환

minDiff를 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    int getTotalMinute(string timePoint) {
        int time = stoi(timePoint.substr(0,2));
        int minute = stoi(timePoint.substr(3));
        int totalMinute = time * 60 + minute;
        return totalMinute;
    }

    int findMinDifference(vector<string>& timePoints) {
        vector <int> minutes;
        for(auto t : timePoints) {
            minutes.push_back(getTotalMinute(t));
        }
        sort(minutes.begin(), minutes.end());
        for(auto m : minutes) cout << m << ' ';
        int minDiff = 0x3f3f3f3f;
        
        for (int i = 1; i < minutes.size(); ++i) {
            minDiff = min(minDiff, minutes[i] - minutes[i - 1]);
        }
        int nextDay = 1440 + minutes[0];
        int circularDiff = (nextDay - minutes.back());
        minDiff = min(minDiff, circularDiff);

        return minDiff;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.