학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했다. 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정한다.
학급 회장으로 선택된 기호를 출력한다.
C
function solution(s) {
let answer;
let max = 0;
let hashObj = {};
const arr = s.split('');
for(let i = 0; i < arr.length; i++) {
if (hashObj[arr[i]]) {
hashObj[arr[i]] += 1;
} else {
hashObj[arr[i]] = 1;
}
}
console.log(hashObj);
for(let key in hashObj) {
const value = hashObj[key];
if (value > max) {
max = value
answer = key;
}
}
return answer;
}
const s = 'BACBACCACCBDEDE';
console.log(solution(s));
빈 배열에 키를 전달해주고, 키에 맞는 값을 증감하는 식으로 배열을 정리해주었다.
배열 안에서 value를 뽑아내, 최대값을 의미하는 변수와 비교해 키를 리턴값으로 재할당하는 식으로 문제를 풀이했다.
const hash = new Map()
으로 변수를 선언하면, 키와 벨류가 한 쌍의 쌍으로 묶이는 객체를 얻을 수 있다.
set()
함수와 get()
함수로 해당 프로퍼티가 존재하면, 숫자를 증감시키는 형식으로 문제를 풀이하면 된다.
function solution(s) {
let answer;
let hash = new Map();
for (let x of s) {
if (hash.hasOwnProperty(x)) {
hash.set(x, hash.get(x) + 1);
} else {
hash.set(x, 1);
}
}
console.log(hash);
let max = Number.MIN_SAGE_INTEGER;
for (let [key, value] of hash) {
if (value > max) {
max = value;
answer = key;
}
}
return answer;
}