말랑한 하루

[Programmers] 보석 쇼핑 (Lv 3, JavaScript) 본문

문제풀이/Programmers

[Programmers] 보석 쇼핑 (Lv 3, JavaScript)

지수는말랑이 2022. 7. 20. 14:34
반응형

[ 학습 내용 ]

Map()

1. 생성
var map = new Map();

2. key-value 삽입 및 삭제
map.set("key", "value");
map.delete("key");

3. 요소 순회
// forEach 구문을 활용해 value, key 사용하기
map.forEach((value, key, map) => {
	console.log();
}, thisArg)

// map의 item을 순회, map은 삽입 및 삭제에 순서가 유지됨
var iterator_key = map.keys();
var iterator_values = map.values();
var iterator_keys_values = map.entires();
for(var i=0; i<map.size; i++) {
	iterator.next().value;
}

while(true) {
	var item = map.values().next().value;
}

Set()

1. 생성
var items = ["JavaScript", "C++", "Java", "JavaScript", "C++", "Python"];
var set = new Set(items);

2. 추가 및 삭제
set.add(item);
set.delete(item);

3. 요소 순회
var iterator_values_values = set.entires();
var iterator_values = set.values();

while(true) {
	var item = iterator.next().value;
}

[ 소스 코드 ]

function solution(gems) {
    var cnt = new Set(gems).size;
    var gem_map = new Map();
    var answer = [1, gems.length];
    
    gems.forEach((gem, index) => {
        gem_map.delete(gem);
        gem_map.set(gem, index);
        console.log()
        if (gem_map.size === cnt) {
            var window = [gem_map.values().next().value + 1, index + 1];
            answer = answer[1] - answer[0] <= window[1] - window[0] ? answer : window;
        }
    })
    return answer;
}

[ 코드 분석 ]

Js의 Map에서 요소가 추가되는 경우, Update되지 않는 set에 대해 요소의 순서를 그대로 유지하고 있음을 활용해 진행한다.

반응형
Comments