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

O2o2✨·2022년 9월 10일
0

알고리즘

목록 보기
42/43
function solution(gems) {
    let answer = [0, gems.length];
    let start = 0;
    let end = 0;
    const collection = new Map();
    const gemKind = new Set(gems).size;
    collection.set(gems[start], 1);
    while (start < gems.length && end < gems.length) {
        if (collection.size === gemKind) {
            if (end - start < answer[1] - answer[0]) {
                answer = [start + 1, end + 1];
            }
            const cnt = collection.get(gems[start]);
            if (cnt - 1 === 0) {
                collection.delete(gems[start]);
            }
            else {
                collection.set(gems[start], cnt - 1);
            }
            start++;
        }
        else if (collection.size < gemKind) {
            end++;
            const cnt = collection.get(gems[end]);
            collection.set(gems[end], 1 + (cnt || 0));
        }
    }
    return answer;
}
profile
프론트엔드 & 퍼블리셔

0개의 댓글