효율성(해쉬) - 6. 학급 회장

문제
A, B, C, D, E 의 사람이 있다
투표용지는 N개가 있다
N번째의 투표가 발표되면
누가 반장으로 선출 되었는지 출력하는 함수 작성하라
반드시 한 명의 반장이 선출된다고 가정한다.
입력예제
15
BACBACCACCBDEDE
출력예제
C
문제에 사용되는 개념정리
Map객체: https://devdocs.io/javascript/global_objects/map
Map.prototype.set(): https://devdocs.io/javascript/global_objects/map/set
Map.prototype.has(): https://devdocs.io/javascript/global_objects/map/has
The Map object holds key-value pairs and remembers the original insertion order of the keys.
Any value (both objects and primitive values) may be used as either a key or a value.
A Map object iterates its elements in insertion order — a for...of loop returns an array of [key, value] for each iteration.
//Iterating over a Map
const iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);
for (const entry of iterable) {
console.log(entry);
}
// ['a', 1]
// ['b', 2]
// ['c', 3]
for (const [key, value] of iterable) {
console.log(value);
}
// 1
// 2
// 3
풀이 코드1
function solution(s){
let answer;
let sH = new Map();
for (let x of s) { // B A C B A ...
if (sH.has(x)) { // x가 sH Map obj에 이미 존재하면
sH.set(x, sH.get(x) + 1); //sH[x] 에 기존 숫자에 1 더함
} else sH.set(x, 1); //없으면 1로 초기화
}
let max = Number.MIN_SAFE_INTEGER;
for (let [key, val] of sH) {
// console.log(key, val); //B 3 | A 3 | C 5 | D 2 | E 2
if (val > max) {
max = val;
answer = key;
}
}
return answer; // C
}
let str="BACBACCACCBDEDE";
console.log(solution(str));
코드2
객체로 풀때 참고자료: 객체 내의 값 인스턴스 개수 세기
Array.prototype.reduce() - JavaScript | MDN
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
developer.mozilla.org
//내 풀이 코드
//reduce함수를 이용해서 객체를 만들고 key와 value 값을 매핑함
//만든 객체에서 value값이 최대인 key값을 출력하는 함수를 만듬
function solution(s){
let answer;
let students = [...s];
let countedNames = students.reduce((prev, curr) => {
if (curr in prev) prev[curr]++
else prev[curr] = 1;
return prev;
}, {});
console.log(countedNames); //{B: 3, A: 3, C: 5, D: 2, E: 2}
let max = 0;
for (let x in countedNames) {
if (max < countedNames[x]) {
max = countedNames[x];
answer = x;
}
}
return answer; // C
}
let str="BACBACCACCBDEDE";
console.log(solution(str));
출처
자바스크립트 알고리즘 문제풀이(코딩테스트 대비) - 인프런 | 강의
자바스크립트(JavaScript)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 재미있게 풀 수 있는 기초 단계 문제부터 고급 알고리즘까지 단계별로 차근차근 배우도록 설계된 강좌입니다., - 강의
www.inflearn.com