문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
새롭게 디자인된 키패드를 테스트 하는데, 테스트 참가자는 n개의 키를 순서대로 하나씩 누른다.
keyPressed[i]가 i번째 키가 눌러지는 길이가 n인 문자열 keyPressed와 releaseTimes[i]가 i번째 키가 떼지는 시간으로 정렬된 리스트가 주어진다.배열 둘 다 0부터 시작한다. 0번째 키가 0시에 눌렸고, 이후 모든 키는 이전 키에서 떼는 정확한 순간에 눌렀다.
테스트 참가자는 가장긴 입력 시간을 가진 키를 알고 싶다. i번째 키 입력은 releaseTimes[i] - releaseTimes[i - 1]의 시간이고, 0번째 키 입력은 releaseTimes[0]이다.
테스트 중에 동일한 키가 여러 번 입력될 수 있고, 모두 같지 않은 입력 시간을 갖을 수 있다.
가장 길게 입력된 키를 반환해라. 이런 키가 여러 개면 사전순으로 뒤에 있는 키를 반환해라.
#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이다.
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;
}
}