본문 바로가기
코딩 테스트 문제 및 풀이

[JS] 코딩 테스트 문제 : 학급 회장 [해쉬 맵]

by spare8433 2023. 11. 1.

문제 : 학급 회장 [해쉬 맵]



문제 설명


학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.


선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.


▣ 입력설명

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


▣ 출력설명

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


▣ 입력예제 1

15
BACBACCACCBDEDE


▣ 출력예제 1

C



내코드


function solution(s) {
  let answer;
  let max = Number.MIN_SAFE_INTEGER;

  // 후보등록
  let candidateMap = new Map([
    ["A", 0],
    ["B", 0],
    ["C", 0],
    ["D", 0],
    ["E", 0],
  ]);

  // 투표 결과 반영
  for (const word of s) {
    candidateMap.set(word, candidateMap.get(word) + 1);
  }

  candidateMap.forEach((value, key) => {
    if (value > max) {
      max = value;
      answer = key;
    }
  });

  // 맵 결과
  console.log(candidateMap);
  return answer;
}
let str = "BACBACCACCBDEDE";



풀이


  1. 후보들을 Map 으로 {Key:이름 , Value: 투표 수} 로 선언
  2. 투표 결과 문자열에서 문자에 맞게 투표 수를 증가
  3. 후보들을 순회하면서 투표 수가 가장 높은 후보를 저장



보완할 수 있는 부분


// 기존코드
let candidateMap = new Map([
  ["A", 0],
  ["B", 0],
  ["C", 0],
  ["D", 0],
  ["E", 0],
]);

for (const word of s) {
  candidateMap.set(word, candidateMap.get(word) + 1);
}

// 보완코드
let sH = new Map();

// 투표 결과 문자열에 후보의 기호가 있다면 표를 +1 없다면 1표를 얻은채로 새로 등록
for (let x of s) {
  if (sH.has(x)) sH.set(x, sH.get(x) + 1); // 투표 수 증가
  else sH.set(x, 1); // 있으면 Map 에 등록
}




참고

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4/dashboard