프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
😉문제 풀이 설명
개인적으로 조금 어려웠던 문제였습니다.
이 문제는 Map 객체를 쓰지 않고는 어떻게 풀 방법이 생각나지 않네요.
이번에 배웠던 점은 map.value().next() 함수를 통해서 Map을 Queue와 같은 형태로 사용할 수 있다는 점입니다.
Map 객체를 Queue의 형태로 사용할 수 있으면서 동시에 key값으로 원하는 값을 가질 수 있어 데이터를 찾는데 배열을 순회하는 형식O(n)이 아닌 한번에 찾을 수 있는 점O(1)을 배울 수 있었습니다.
Map.prototype.values() - JavaScript | MDN
values() 메서드는 배열의 각 아이템의 값을 순회하는 새로운 맵 반복자 (en-US) 객체를 반환합니다.
developer.mozilla.org
map객체의 values()메서드, keys() 메서드는 “이터레이터 오브젝트”를 반환하기 때문에, 순서를 알 수 있고 이를 통해 Queue와 같은 형태로 사용가능 합니다.
이를 활용하면 정말 쉽게 풀 수 있습니다!
😎문제 풀이 코드
function solution(gems) {
const map = new Map()
const num_goal = [...new Set(gems)].length
const answer_arr = [];
gems.forEach((gem,index)=>{
map.delete(gem) //map.values().next()가 정상 작동하기 위해서 삭제해준다.
map.set(gem,index)
if(map.size === num_goal)
answer_arr.push([map.values().next().value+1, index+1])
})
return answer_arr.sort((a,b)=> (a[1]-a[0])-(b[1]-b[0]))[0]
}
map.delete()를 통해 기존 값을 지워주지 않으면, 기존의 키 값에 할당되기 때문에 Queue의 형태로 진행되지 않는다는 점만 유의하면 되겠습니다.
반응형
'개발관련 > 프로그래머스' 카테고리의 다른 글
[프래그래머스 알고리즘] 징검다리 건너기 JavaScript JS (0) | 2023.09.02 |
---|---|
[프로그래머스 알고리즘] 불량 사용자 JavaScript JS (0) | 2023.08.30 |
[프로그래머스 알고리즘] 스티커모으기(2) JavaScript JS (0) | 2023.08.30 |