[프로그래머스] 보석 쇼핑
2020. 7. 3. 00:51ㆍ프로그래머스/카카오
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
int[] answer = new int[2];
answer[0] = 1;
answer[1] = gems.length;
int compare = gems.length-1;
int start=0;
int end=0;
int flag =0;
Map<String, Integer> gemMap = new HashMap<>();
for(int i=0; i<gems.length; i++){
if(!gemMap.containsKey(gems[i])){
gemMap.put(gems[i],0);
}
}
while(end<gems.length){
if(flag<gemMap.size()){
gemMap.put(gems[end],gemMap.get(gems[end])+1);
if(gemMap.get(gems[end])==1){
flag++;
}
end++;
}else{
if((end-1)-start<compare){
answer[0] = start+1;
answer[1] = end;
compare = answer[1]-answer[0];
}
gemMap.put(gems[start],gemMap.get(gems[start])-1);
if(gemMap.get(gems[start])==0){
flag--;
}
start++;
}
}
return answer;
}
}
1. 인덱스마다 재탐색을 실행하면 효율성에서 통과하지 못한다.
2. 따라서 최악의 경우로 초기화 한 후 , 처음과 끝을 정하고 인덱스를 변화시키며 조건에 부합할때마다 answer값을 변경시킨다.
3. 각 보석의 현재 갯수를 나타내도록 map을 설계한 후, 1개일때와 0개일때를 통해 현재 포함된 보석의 갯수를 알도록 한다.
4. 현재 포함된 보석의 갯수와 전체 보석의 갯수를 비교하며 answer을 업데이트 해나간다.
'프로그래머스 > 카카오' 카테고리의 다른 글
[프로그래머스] 수식 최대화 (0) | 2020.07.02 |
---|---|
[프로그래머스] 키패드 누르기 (0) | 2020.07.02 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2020.05.05 |
[프로그래머스] 프렌즈 4블록 (0) | 2020.05.03 |
[프로그래머스] [1차] 셔틀버스 (0) | 2020.04.28 |