코딩테스트
[프로그래머스] 보석쇼핑
_서리__
2023. 6. 9. 14:29
function solution(gems) {
var answer = [];
let answerArr = [];
let gemsObj = {};
let left = 0;
let right = 0;
//아마 윈도우 문제
//일단 몇개의 보석이 있는지 찾고, 윈도우 만들어서 보석 다 있는지 확인.
for(let i=0;i<gems.length;i++){
if(!gemsObj[gems[i]]){
gemsObj[gems[i]] = 0;
}
}
let gemsLen = Object.keys(gemsObj).length;
while(left<=right&&right<=gems.length){
if(gemsLen>0){
if(gemsObj[gems[right]]===0){
gemsLen--
}
gemsObj[gems[right]]+=1
right++
}
else if(gemsLen===0){
answerArr.push([left,right])
gemsObj[gems[left]]-=1
if(gemsObj[gems[left]]===0){
gemsLen++
}
left++
}
}
let min = answerArr[0]
for(let i=1;i<answerArr.length;i++){
if(answerArr[i][1]-answerArr[i][0]<min[1]-min[0]){
min = answerArr[i]
}
}
answer = [min[0]+1,min[1]]
return answer;
}
투포인터를 이용하여 풀었다.