학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다. 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다. 선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.
const solution = (str) => {
const obj = { A: 0, B: 0, C: 0, D: 0, E: 0 };
var splitStr = str.split("");
var keys = Object.keys(obj); // key값들의 배열
// 이중 for문으로 splitStr과 keys의 요소 비교하여 일치하면 +1
for (let i = 0; i < splitStr.length; i++) {
for (let j = 0; j < keys.length; j++) {
if (splitStr[i] === keys[j]) {
obj[splitStr[i]]++;
}
}
}
// obj : {A: 3, B: 3, C: 5, D: 2, E: 2}
var values = Object.values(obj);
// maxIdx : obj의 value값 중 최대값의 index번호
var maxIdx = values.indexOf(Math.max(...values));
return keys[maxIdx];
};
let str = "BACBACCACCBDEDE";
console.log(solution(str));
function solution(str) {
let answer = "";
let hash = new Map();
// map객체에 기호와 횟수를 넣는 과정
// set : map객체에 주어진 키와 값을 추가, 업데이트
// has : map객체에 주어진 키에 해당하는 요소 존재 여부 확인
// get : map객체에 주어진 키에 해당하는 요소 반환
for (let s of str) {
if (hash.has(s)) hash.set(s, hash.get(s) + 1);
else hash.set(s, 1);
}
let max = Number.MIN_SAFE_INTEGER; // 충분히 작은 수
// hash 객체에서 [key, value] 타입으로 하나씩 꺼내기
for (let [key, value] of hash) {
if (value > max) {
max = value;
answer = key;
}
}
return answer;
}
let str = "BACBACCACCBDEDE";
console.log(solution(str));