문제 : 학급 회장 [해쉬 맵]
문제 설명
학급 회장을 뽑는데 후보로 기호 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";
풀이
- 후보들을 Map 으로 {Key:이름 , Value: 투표 수} 로 선언
- 투표 결과 문자열에서 문자에 맞게 투표 수를 증가
- 후보들을 순회하면서 투표 수가 가장 높은 후보를 저장
보완할 수 있는 부분
// 기존코드
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 에 등록
}
참고
'코딩 테스트 문제 및 풀이' 카테고리의 다른 글
[JS] 코딩 테스트 문제 : 모든 아나그램 찾기 [해쉬, 투포인터, 슬라이딩 윈도우] (0) | 2023.11.27 |
---|---|
[JS] 코딩 테스트 문제 : 아나그램 [해쉬 맵] (0) | 2023.11.01 |
[JS] 코딩 테스트 문제 : 최대 매출 (0) | 2023.10.31 |
[JS] 코딩 테스트 문제 : 연속 부분 수열 2 (0) | 2023.10.30 |
[JS] 코딩 테스트 문제 : 연속부분수열1 (0) | 2023.10.25 |