[프로그래머스] Lv3. 보석 쇼핑- JavaScript

이상돈·2023년 3월 25일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 3

출처 : 프로그래머스 - 보석 쇼핑

문제

제한사항

📌 내가 이해한 다른분의 풀이

ES6부터 등장한 Map객체를 이용하여, [보석이름,인덱스]로 매핑해주고, 같은 보석이 등장할 경우엔 기존 보석을 delete해주고, 다시 최신 인덱스로 갱신하여 매핑해준다.
function solution(gems) {
    var answer = [];
    let size = new Set(gems).size;
    let map = new Map()
    let ansArr = [];
    for(var i =0; i<gems.length; i++){
        //기존의 보석이 등장하였을 경우 삭제하고, 다시 갱신해준다.
        map.delete(gems[i]);
        map.set(gems[i],i);
        if(map.size === size){
            let val = [map.values().next().value+1, i+1]
            ansArr.push(val);
        }
    }
    //ansArr를 sort해주는 조건은 우선 두 값사이 차이가 적은걸로 sort해주고
    //만약 차이가 같다면, 앞에있는 숫자가 작은걸 우선적으로 sort하도록 한다.
    ansArr.sort((a,b)=>{
        if((b[1] - b[0]) === (a[1]-a[0])){
            return a[0] > b[0] ? 1 : -1
        }else{
            return (a[1] - a[0]) > (b[1] - b[0])? 1 : -1    
        }
        
    })
    
    return answer = ansArr[0]
}

📌 느낀점

이전에 map객체를 사용하는데, 이해가 잘 되지않았어서 제대로 사용하지 않았다. 이번 문제를 풀면서 map객체를 다시 정리하였고, 중복 보석을 삭제하고, 최신의 인덱스로 갱신해주는 방법도 좋은 방법이라고 느꼈다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글