반응형
출처: 프로그래머스 강의, '코딩테스트 광탈 방지 A to Z Javascript '
강의 내용 정리 및 공부 목적으로 게시하는 글임을 알립니다.
해시테이블 자료구조
오늘은 해시테이블 자료구조에 대해 알아보려고 한다.
해시테이블이란? 키와 값을 받아 키를 hashing하여 나온 index에 값을 저장하는 선형 자료구조이다.
키와 값 하면 떠오르는 Javascript 문법이 있을 것이다. 바로 객체, Object가 이에 해당한다.
추가로 이번 강의를 통해 알게 된 문법이 있는데 바로 Map 메소드이다.
Map은 const sample = new Map()과 같이 선언하며
sample.set(key, value)로 키와 값을 설정할 수 있으며
sample.get(key)로 해당 키의 값을 불러올 수 있다.
특이한 점은 Map 메소드에서는 key값으로 객체를 할당할 수 있다.
예제 풀이
이제 프로그래머스의 해시테이블 Lv 3의 '베스트 앨범' 문제를 보며 좀 더 공부해보자.
아래 코드는 강의에서 제시한 코드이다. (혼자 풀어보려 했는데 결국 못풀었다는...)
function solution(genres, plays) {
const genreMap = new Map();
genres
.map((genre, index) => [genre, plays[index]])
.forEach(([genre, play], index) => {
// genreMap이 undefined일 때의 초기값 설정
const data = genreMap.get(genre) || {total: 0, songs: []};
genreMap.set(genre, {
total: data.total + play,
songs: [...data.songs, {play, index}]
.sort((a, b) => b.play - a.play)
.slice(0, 2)
})
})
return [...genreMap.entries()]
.sort((a,b) => b[1].total - a[1].total)
.flatMap(item => item[1].songs)
.map(song => song.index)
}
반응형
'개발자일기 > 코테를 준비하자' 카테고리의 다른 글
[프로그래머스] Queue에 대해 알아보자 - 프린터 문제 실습 (0) | 2022.03.02 |
---|