프로그래머스 - [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