[LeetCode] Slowest Key

아르당·2026년 6월 5일

LeetCode

목록 보기
342/561
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

새롭게 디자인된 키패드를 테스트 하는데, 테스트 참가자는 n개의 키를 순서대로 하나씩 누른다.

keyPressed[i]가 i번째 키가 눌러지는 길이가 n인 문자열 keyPressed와 releaseTimes[i]가 i번째 키가 떼지는 시간으로 정렬된 리스트가 주어진다.배열 둘 다 0부터 시작한다. 0번째 키가 0시에 눌렸고, 이후 모든 키는 이전 키에서 떼는 정확한 순간에 눌렀다.

테스트 참가자는 가장긴 입력 시간을 가진 키를 알고 싶다. i번째 키 입력은 releaseTimes[i] - releaseTimes[i - 1]의 시간이고, 0번째 키 입력은 releaseTimes[0]이다.

테스트 중에 동일한 키가 여러 번 입력될 수 있고, 모두 같지 않은 입력 시간을 갖을 수 있다.

가장 길게 입력된 키를 반환해라. 이런 키가 여러 개면 사전순으로 뒤에 있는 키를 반환해라.

Example

#1
Input: releaseTimes = [9, 29, 49, 50], keysPressed = "cbcd"
Output: "c"
Explanation: 키 입력은 다음과 같다.
'c'의 키 입력 기간은 9이다.
'b'의 키 입력 기간은 29 - 9 = 20이다.
'c'의 키 입력 기간은 49 - 29 = 20이다.
'd'의 키 입력 기간은 50 - 49 = 1이다.
가장 길게 입력된 키는 'b', 'c' 둘 다 20으로 같다.
'c'는 사전적으로 'b'보다 뒤에 있어서, 답은 'c'이다.

#2
Input: releaseTimes = [12, 23, 36, 46, 62], keysPressed = "spuda"
Output: "a"
Explanation: 키 입력은 다음과 같다.
's'의 키 입력 기간은 12이다.
'p'의 키 입력 기간은 23 - 12 = 11이다.
'u'의 키 입력 기간은 36 - 23 = 13이다.
'd'의 키 입력 기간은 46 - 36 = 10이다.
'a'의 키 입력 기간은 62 - 46 = 16이다.
가장 길게 입력된 키는 'a'이고, 기간은 16이다.

Constraints

  • releaseTimes.length == n
  • keyPressed.length == n
  • 2 <= n <= 1000
  • 1 <= releaseTimes[i] <= 10^9
  • keyPressed는 오직 영어 소문자만 포함한다.

Solved

class Solution {
    public char slowestKey(int[] releaseTimes, String keysPressed) {
        char key = keysPressed.charAt(0);
        int max = releaseTimes[0];

        for(int i = 1; i < releaseTimes.length; i++){
            int diff = Math.abs(releaseTimes[i] - releaseTimes[i - 1]);

            if(diff > max || (diff == max && keysPressed.charAt(i) > key)){
                key = keysPressed.charAt(i);
                max = diff;
            }
        }

        return key;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글