프로그래머스 - [Level 3] 보석 쇼핑(JAVASCRIPT)
카테고리 : 투 포인터
이 포스팅은 다른 사람의 풀이를 참고했습니다.
자바스크립트는 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