Algorithm/LeetCode

[LeetCode # 1629] Slowest Keys

꼽냥이 2021. 9. 7. 14:22
반응형

주어진 문제는 위와 같다. n 을 크기로 갖는 문자열 'keysPressed' 와 배열 'releaseTimes' 이 주어지는데 'keysPressed' 는 어떤 순간 어떤 키가 눌렸는 지, 'releaseTimes' 는 각 키가 떼진 순간의 시간을 의미한다.

 

i 번째로 눌린 키가 눌려진 기간은 releaseTimes[i] - releaseTimes[i - 1] 로 표현된다. (0 번째 키는 releaseTimes[0]) 주어진 정보를 바탕으로 가장 오랫동안 눌려진 키를 찾는 문제이다. 서로 다른 순간에 같은 키가 눌릴 수 있고, 같은 키가 눌린 시간은 각각의 시간으로만 평가하고 누적되지 않는다. 가장 오래 눌려진 키가 여러 개일 경우에는, 사전적으로 더 큰 값을 갖는 키를 정답으로 갖는다.

 

이 문제는, 단순히 0 번째부터 n - 1 번째까지 (0 - indexed) 각각의 키가 눌린 시간을 계산해 그 중 가장 큰 값을 찾도록 하는 방식으로 문제를 해결했고, 해결을 위해 작성한 소스 코드는 다음과 같다.

 

class Solution {
public:
    char slowestKey(vector<int> &releaseTimes, string keysPressed) {
        int len = keysPressed.length();
        char ans = keysPressed[0];
        int longestDuration = releaseTimes[0];

        for (int i = 1; i < len; i++) {
            int duration = releaseTimes[i] - releaseTimes[i - 1];

            if (duration > longestDuration || (duration == longestDuration && keysPressed[i] > ans)) {
                ans = keysPressed[i];
                longestDuration = duration;
            }
        }

        return ans;
    }
};