개발자일기/코테를 준비하자

[프로그래머스] 해시테이블에 대해 알아보자 - 베스트 앨범 문제 실습

뫙뭉 2022. 3. 4. 21:11
반응형

출처: 프로그래머스 강의, '코딩테스트 광탈 방지 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)
    
}

 

반응형