프로그래머스 - [Level 3] 보석 쇼핑(JAVASCRIPT)

less than 1 minute read

프로그래머스 보석 쇼핑[2020 카카오 인턴십]

카테고리 : 투 포인터

이 포스팅은 다른 사람의 풀이를 참고했습니다.

자바스크립트는 Map() 활용하면 쉽게 풀이할  있다.
개념은  포인터 접근과 비슷하다.

1) Map 자료구조에는 {보석문자열,보석의 배열인덱스} {key : value } 쌍으로 저장한다.

2) gems 배열을 순회하면서
집어 넣으려는 보석 문자열이 Map에 존재한다면 삭제를 해주고,
새로운 보석 문자열을 넣어준다.

3) Map의 원소 갯수와 보석 타입의  개수가 같다면
범위를 범위 배열에 저장해준다.

4) 가장 짧은 범위, 같은 범위가 여러개라면 시작 인덱스가 가장 작은 순으로
정렬을하고, 범위 배열의 index=0 값을 return 하면 정답이다.


다른 사람의 풀이

function solution(gems) {
    const gemVarietyCounts = new Set(gems).size;
    const gemMap = new Map();
    const gemLengths = [];
    gems.forEach((gem,i) => {
        gemMap.delete(gem);
        gemMap.set(gem,i);
        if(gemMap.size === gemVarietyCounts) {
            gemLengths.push([gemMap.values().next().value + 1, i + 1 ]);
        }
    });

    gemLengths.sort((a, b) => {
        if ((a[1] - a[0]) === (b[1] - b[0])) {
            return a[1] - b[1];
        }
        return (a[1] - a[0]) - (b[1] - b[0]);
    });

    return gemLengths[0];
}


Leave a comment