728x90
반응형
https://leetcode.com/problems/slowest-key/submissions/
1. 문자의 경우 대소 비교가 가능하다.
-> 누르는 시간이 같을 경우 사전순으로 더 큰 키 선택
2. 동일한 문자가 여러번 등장할 수 있으므로 해시맵 사용
class Solution {
public char slowestKey(int[] releaseTimes, String keysPressed) {
//0초 부터 시작
char[] arr = keysPressed.toCharArray();
int n=releaseTimes.length;
Map<Character, Integer> map = new HashMap<>();
int answer=0;
char ch=' ';
int cnt=0;
for(int i=0;i<n;i++){
if(!map.containsKey(arr[i])){
//System.out.println("Not contains");
map.put(arr[i], releaseTimes[i]-answer);
}
else {
//System.out.println("contains");
if(map.get(arr[i])<releaseTimes[i]-answer){
map.put(arr[i], releaseTimes[i]-answer);
}
}
answer=releaseTimes[i];
//System.out.println(answer);
}
int result=Integer.MIN_VALUE;
for(char x: map.keySet()){
if(map.get(x)>result) {
result=map.get(x);
ch=x;
}
if(map.get(x)==result &&ch<x){
ch=x;
}
}
return ch;
}
}
+) 세련된 풀이
-> 해시맵을 사용하지 않은 풀이
: 동일한 문자가 나오는 것과 관계없이 누른 시간이 같을 경우에 사전순서 확인하면 된다.
class Solution {
public char slowestKey(int[] releaseTimes, String keysPressed) {
//1. ds
int n=releaseTimes.length;
//초기값 설정
int max=releaseTimes[0];
char c = keysPressed.charAt(0);
//2. loop
//초기값을 설정했기 때문에 1부터 시작
for(int i=1; i<n;i++){
//누른 시간 구하기
int diff=releaseTimes[i]-releaseTimes[i-1];
//누른 시간 갱신해 더 긴 시간 존재시 변경하는데, 같을 경우엔 사전적으로 더 클 때만 변경
if(diff > max || (diff==max && keysPressed.charAt(i) >c)){
max=diff;
c=keysPressed.charAt(i);
}
}
return c;
}
}
class Solution {
public char slowestKey(int[] releaseTimes, String keysPressed) {
char answer = ' ';
int time=0;
int release=0;
int n=keysPressed.length();
for(int i=0;i<n;i++){
if(release<=releaseTimes[i]-time){
if(release<releaseTimes[i]-time||answer<keysPressed.charAt(i)){
answer=keysPressed.charAt(i);
release=releaseTimes[i]-time;
}
}
time=releaseTimes[i];
}
return answer;
}
}
class Solution {
public char slowestKey(int[] releaseTimes, String keysPressed) {
//1.ds
int n=keysPressed.length();
//초기값 설정해 초기값과 비교함으로써 효율성 증가
int release=releaseTimes[0];
char answer=keysPressed.charAt(0);
//2.loop
for(int i=1;i<n;i++){
if(release<=releaseTimes[i]-releaseTimes[i-1]){
if(release<releaseTimes[i]-releaseTimes[i-1]||answer<keysPressed.charAt(i)){
answer=keysPressed.charAt(i);
release=releaseTimes[i]-releaseTimes[i-1];
}
}
}
return answer;
}
}
728x90
반응형
'Java > Java 알고리즘 LeetCode' 카테고리의 다른 글
[LeetCode- Part. 3] 5. Province의 수 (+DFS) (0) | 2022.11.12 |
---|---|
[LeetCode- Part. 3] 4. 숫자를 영어 단어로 변환 # (+분할과 정복) (0) | 2022.11.12 |
[LeetCode- Part. 3] 2. 소행성 충돌 (0) | 2022.11.09 |
[LeetCode- Part. 3] 1. 회문 깨기 # (+toCharArray, valueOf) (0) | 2022.11.09 |
[LeetCode- Part. 2] 5. 음식을 구하기위한 최단 경로 (+BFS) (0) | 2022.11.09 |