안녕하세요
프로그래머스 JS [완주하지 못한 선수]★★ / 해시테이블, map 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42576
해시 문제이기 때문에 해시에 대해서도 알아봅니다.
해시테이블은 kep와 value로 구성되어 객체와 기능이 비슷합니다. 객체는 key로 string만이 가능하지만,
해시 자료형 : key로 string, number, function, object 모두 가능합니다.
let map = new Map(); 으로 선언을 합니다.
map.set() 으로 키(key)와 값(value)을 삽입합니다.
map.set(str, 1) : 문자열에 1을 할당
map.set(0, 2) : 숫자 0에 1을 할당
map.set(obj, 3) : 객체에 1을 할당
map.set(function, 4) : 함수에 1을 할당
map.get()으로 값을 얻습니다.
map.get(str); // 1
map.get(0); // 2
map.get('none'); // undefined 존재하지 않을 경우 undefined를 반환합니다.
객체의 경우에는 객체를 담은 변수를 입력해주어야 합니다.
map.get({ a: 1 }); // undefined, obj의 값이 { a: 1 } 이라 할지라도, 다른 객체로 인식합니다.
(객체에는 고유한 아이디가 있는 것 같습니다. 뭐라고 찾아보야하 할지 검색어를 모르겠습니다.
나중에 공부가 필요할 때 js를 깊게 파보아야 겠습니다.)
map.has()로 값을 찾습니다. true false를 반환합니다.
map.has(str); // true
map.has('none'); // false
map.delete()로 값을 삭제합니다.
map.delete(str); // 삭제를 한 뒤에는 true 를 반환합니다.
map.get('none'); // false
console.log(map); // Map(3) { 0 => 0, { a: 1 } => 2, [Function: fnc] => 3 }
map의 size 프로퍼티에 접근하여 길이를 확인합니다.
map.size // 4
map.length // undefined
hash는 for - of 문을 사용합니다.
for (let [key, value] of map) {
console.log(key + ' : ' + value)
}
map.keys() 로 key에 접근합니다.
for (let key of map.keys()) {
console.log(key)
}
map.values()로 value에 접근합니다.
for (let value of map.values()) {
console.log(value)
}
function solution(participant, completion) {
let hashed = []
participant.forEach(entry => {
hashed[entry] = hashed[entry] ? hashed[entry] + 1 : 1
})
completion.forEach(entry => {
hashed[entry] = hashed[entry] - 1
})
for (var key in hashed) {
if (hashed[key] >= 1) return key
}
}
동일한 기능의 코드입니다.
해쉬테이블을 배열로도 사용가능하다는 것을 알게 되었습니다.
특정 값에 접근할 때 유용하게 쓸 수 있을 것 같습니다.
'프로그래머스 > Lv.1' 카테고리의 다른 글
프로그래머스 JS [크레인 인형뽑기 게임] (0) | 2022.10.02 |
---|---|
프로그래머스 JS [키패드 누르기] 거리구하기, 2차원배열 (0) | 2022.10.01 |
프로그래머스 JavaScript [완주하지 못한 선수] filter(), include() (0) | 2022.10.01 |
프로그래머스 JavaScript [체육복] filter(), include() / greedy (0) | 2022.10.01 |
프로그래머스 JavaScript [로또의 최고 순위와 최저 순위] (0) | 2022.10.01 |