해시

js·2022년 6월 3일
0

해시는 Map으로 구현하자

해시는 보통 (key, value) 형태로 구성되며, js에서는 Object나 Map으로 구현합니다. Map은 Object를 사용하는 것에 비해 여러가지 장점이 있습니다.

  1. key값의 다양한 type

Object의 key값은 string 이나 symbol 밖에 허용이 안됨.

Map의 key값으로는 모든 type이 가능하다.

  1. map.size

Object는 자체적으로 길이를 구할 수 없다.

map은 길이를 구할 수 있는 size 내장함수가 있다.

const map = new Map();
map.set('Key1', 1);
map.set('Key2', 1);
...
map.set('Key100', 1);

console.log(map.size) // 100
  1. key 값이 중복 허용되지 않음

  2. 반복문 사용이 편리

const map = new Map();
map.set('Key1', 1);
map.set('Key2', 2);
map.set('Key3', 3);

for (let [key, value] of map) {
  console.log(`${key} = ${value}`);
}

Map 간단 예제

문제

학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.

입력설명

첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가
선생님이 발표한 순서대로 문자열로 입력됩니다.

출력설명

학급 회장으로 선택된 기호를 출력합니다.

입력예제

15
BACBACCACCBDEDE

출력예제

C

console.log(solution("BACBACCACCBDEDE"));

function solution(votes) {
  let answer;
  let vote = new Map();
  let maxVote = Number.MIN_SAFE_INTEGER;

  for (let x of votes) {
    if (vote.has(x)) vote.set(x, vote.get(x) + 1);
    else vote.set(x, 1);
  }
  vote.forEach((numOfVote, candidate) => {
    if (numOfVote > maxVote) {
      maxVote = numOfVote;
      answer = candidate;
    }
  });
  return answer;
}

0개의 댓글