학급 회장(해쉬)
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그
기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작
성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.
▣ 입력설명
첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로
문자열로 입력됩니다.
▣ 출력설명
학급 회장으로 선택된 기호를 출력합니다.
▣ 입력예제 1
15
BACBACCACCBDEDE
▣ 출력예제 1
C
Hashmap을 사용하여 알파벳을 카운팅하는 문제이다.
우선 문제를 풀기전 맵과 셋에 대해서 읽어보면 좋을 것 같다.
https://ko.javascript.info/map-set
✏️작성코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let max = Number.MIN_SAFE_INTEGER;
let sH = new Map();
let answer;
for (let x of s) {
if (sH.has(x)) {
sH.set(x, sH.get(x) + 1); //원래 키가 존재한다면?
} else { //만약에 없으면 다시 set생성자로 만들어준다.
sH.set(x, 1);
}
}
for (let [key, value] of sH) {
if (value > max) { //밸류값이 기존 max보다 크면 최대값.
max = value;
answer = key; //우리가 원하는 것은 벨류의 키인 'c'
}
}
return answer;
}
let str = "BACBACCACCBDEDE";
console.log(solution(str));
</script>
</body>
</html>
우선 맵을 사용하기위해 sH라는 이름으로 Map을 생성해주었다.
(sH는 키:밸류로 이루어져있는 객체이다.)
for of 를 활용해서 s를 순회해주고, 조건문을 사용해여 원래의 키가 존재하는지 확인해준다.
sH.has(x) => sH 맵 객체에 x라는 문자열의 키가 존재한다면, 벨류 값에 카운팅이 1,2,3....으로 들어가고,
sH 맵 객체에 기존의 키('A''B''C''D''E')가 존재하면, x라는 키에 기존값을 가져와서 카운트를 +1 해줘야하기때문에
get(x)+1을 해준다.
만약에 sH에 키가 존재하지않으면 새롭게 생성해줘야하니 set생성자로 생성해주면 된다.
key의 최대 값을 구해야하니
다시 for문을 돌리고 이번에는 [key, value]를 넣고, 조건문으로 value 와 max를 비교해준다.
max에 최대값(5)을 저장하고 문제에서 원하는 것은 벨류의 키인 'c' 니까
answer에 key를 넣어주면 c가 출력된다.
'알고리즘' 카테고리의 다른 글
[알고리즘 문제] 5-7번 (0) | 2022.07.14 |
---|---|
[알고리즘 문제] 5-5번 (0) | 2022.07.12 |
[알고리즘 문제] 5-4번 (0) | 2022.06.21 |
[알고리즘 문제] 5-3번 (0) | 2022.06.17 |
[알고리즘 문제] 5-2번 (0) | 2022.06.17 |