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

김민지·2024년 6월 5일
0

✨ 정답 ✨

// 보석 종류 파악 set. 굳이 요소 확인 필요 x. 갯수만 확인

function solution(gems){
    // 결과 저장 배열, [시작 위치, 종료 위치]
    let answer=[1, gems.length]
    // 보석 종류 갯수
    const gemTotal=new Set(gems).size;
    // 현재 윈도우 내의 보석과 그 위치 저장하는 해시 맵
    const gemMap=new Map();

    for (let i=0;i<gems.length;i++){
        // 현재 보석을 gemMap에서 삭제. 중복 보석이 있을 경우 마지막 위치만 저장하기 위함.
        gemMap.delete(gems[i]);
        // 현재 보석을 gemMap에 추가하거나 업데이트.
        gemMap.set(gems[i], i);
        // gemMap 크기가 gemTotal과 같아지면 현재 윈도우가 모든 종류의 보석을 포함하는지 확인
        if (gemMap.size===gemTotal){
            // gemMap의 가장 첫 번째 값을 가져오기
            const candidateArray=[gemMap.values().next().value+1, i+1];
            // 현재 구간이 더 짧으면 answer 업데이트
            if (answer[1]-answer[0]>candidateArray[1]-candidateArray[0]){
                answer=candidateArray;
            }
        }
    }
    
    return answer
}

🧵 참고한 정답지 🧵

💡💡 해설 💡💡

내 코드 설명
주석 참고

profile
이건 대체 어떻게 만든 거지?

0개의 댓글

관련 채용 정보