목록해시 (4)
N

해시 테이블(Hash Table) 키와 값을 받아 키를 해싱(Hashing)하여 나온 index 값을 저장하는 선형 자료구조. 삽입은 O(1)이며, 키를 알고 있다면 삭제와 탐색도 O(1)로 수행한다. 해시 함수를 통해 키를 특정 범위 내 숫자로 변경한다. 키로 "name"이 주어진다면, 컴퓨터에서는 해시 함수를 통해 1239593로 바꿔 데이터를 저장한다. 즉, 사람의 입장에서는 name이지만 컴퓨터의 입장에서는 1239539가 된다. value가 저장되는 공간을 bucket이라 한다. JavaScript에서 객체(Object)가 해시 테이블에 해당한다. 해시 충돌(Hash Collision) 만약 해시 함수의 결과가 기존에 있던 값과 같게 된다면 충돌이 발생한다. 이를 해결하기 위해서 "분리 연결법"..
https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 해시를 이용한 문제 풀이. gSum 객체는 각 장르의 총 플레이 횟수를 담는다. gIndex 객체는 각 장르의 곡마다 플레이 횟수와 인덱스를 담는다. 우선 각 장르 별 총 플레이 횟수와 인덱스를 알아야 한다. for문을 통해 genres와 plays의 원소에 접근. 만약 gSum 객체에서 genre를 key로 가지고 있지 않다면(undefined) 0으로 초기..

map과 multimap을 사용했다. 인덱스와 재생 횟수, 장르, 장르 별 재생 횟수를 다뤄야 하기 때문에 상당히 복잡하게 코딩을 했다. multimap mm을 선언하였다. mm의 key는 genre, value는 재생 횟수와 해당 곡의 인덱스를 pair로 묶어서 값을 넣는다. map m. 각 장르별 재생된 총 횟수이다. 우선 모든 장르와 재생횟수, 총 재생 횟수를 for문을 통해 모두 다 넣는다. 다음 for문에서는 각 장르별로 2개씩 재생 횟수의 내림차순으로 정렬하여 mm에 넣는 작업을 한다. 내림차순 정렬을 하기 위해 vector v를 선언한다. 해당 장르의 재생 횟수와 인덱스를 v에 넣고 sort한다. sort의 desc는 pair 형태에 맞게 따로 정의했다. 정렬이 끝나면 원래 있던 mm의 장르..

카테고리는 해시가 나와있지만, 간단하게 sort()를 활용하여 문제를 풀었다..! 우선 phone_book을 오름차순으로 정렬을 한다. 그리고 for문으로 0 ~ phone_book.size() 만큼 반복하고, 안에서는 i + 1 ~ phon_book.size() 만큼 반복한다. 1번째 for문)str은 현재 전화번호, size는 str의 크기를 나타낸다. 2번째 for문)tmp는 str을 접두어로 가지고 있는지 비교하기 위한 임시 변수로, i + 1부터 끝까지 탐색한다. substr을 이용하여 str의 size만큼 잘라내어 tmp에 저장한다. 그리고 tmp와 str을 비교하여 서로 같으면 바로 retrun false를 해주었다..! 만약 반복문을 끝까지 돌 때까지 return하지 않고 빠져나오면 한 번..