코딩테스트

[프로그래머스] 보석쇼핑

_서리__ 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;
}

투포인터를 이용하여 풀었다.