코린이의 소소한 공부노트

[LeetCode/Easy] 1629. Slowest Key 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 1629. Slowest Key

무지맘 2023. 6. 13. 13:10

1. Input

1) int[] releaseTimes

2) String keysPressed

 

2. Output

1) keysPressed[i]releaseTimes[i-1]에 눌렀다가 releaseTimes[i]에 떼는 작업을 했을 때, 한번에 가장 오래 누른 키를 char로 반환

- keysPressed[0]0에 눌렀다가 releaseTimes[0]에 뗐다.

- 답이 여러 개라면 사전순으로 나열했을 때 가장 뒤에 있는 것을 반환

 

3. Constraint

1) releaseTimes.length == keysPressed.length == n

2) 2 <= n <= 1000

3) 1 <= releaseTimes[i] <= 10^9

4) releaseTimes[i] < releaseTimes[i+1]

5) keysPressed는 영어 소문자로 이루어져 있다.

 

4. Example

Input: releaseTimes = [9,29,49,50], keysPressed = "cbcd" -> Output: "c"

설명:

- c: 9 - 0 = 9

- b: 29 - 9 = 20

- c: 49 - 20 = 20 (9 -> 20으로 갱신)

- d: 50 - 49 = 1

- 가장 오래 누른 것은 시간이 20b, c 2가지이고, 이 중 사전순으로 나열했을 때 뒤에 있는 c를 반환한다.

 

5. Code

1) 첫 코드(2023/06/13)

class Solution {
    public char slowestKey(int[] releaseTimes, String keysPressed) {
        HashMap<Character,Integer> m = new HashMap<>();
        m.put(keysPressed.charAt(0),releaseTimes[0]);
        char max = keysPressed.charAt(0);
        for(int i=1 ; i<keysPressed.length() ; i++){
            m.put(keysPressed.charAt(i), Math.max(m.getOrDefault(keysPressed.charAt(i),0),releaseTimes[i]-releaseTimes[i-1]));
            if(m.get(max)<m.get(keysPressed.charAt(i)))
                max = keysPressed.charAt(i);
        }
        List<Character> list = new ArrayList<>();
        for(char c : m.keySet())
            if(m.get(c)==m.get(max)) list.add(c);
        list.sort(Comparator.naturalOrder());
        return list.get(list.size()-1);
    }
}

- 6%, 9%

 

2) 다시 풀어본 코드(2023/06/13)

class Solution {
    public char slowestKey(int[] releaseTimes, String keysPressed) {
        int[] time = new int[26];
        time[keysPressed.charAt(0)-'a'] = releaseTimes[0];
        int max = keysPressed.charAt(0)-'a';
        for(int i=1 ; i<keysPressed.length() ; i++){
            char c = keysPressed.charAt(i);
            time[c-'a'] = Math.max(time[c-'a'], releaseTimes[i]-releaseTimes[i-1]);
            if(time[max]<time[c-'a']) max = c-'a';
        }
        for(int i=0 ; i<26 ; i++)
            if(time[i]==time[max] && max<i)
                max = i;
        return (char)(max+'a');
    }
}

- 20%, 37%