article thumbnail image
Published 2022. 7. 13. 19:42
학급 회장(해쉬)
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그
기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작
성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.
▣ 입력설명
첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로
문자열로 입력됩니다.
▣ 출력설명
학급 회장으로 선택된 기호를 출력합니다.
▣ 입력예제 1
15
BACBACCACCBDEDE
▣ 출력예제 1
C

 

Hashmap을 사용하여 알파벳을 카운팅하는 문제이다.

우선 문제를 풀기전 맵과 셋에 대해서 읽어보면 좋을 것 같다.

https://ko.javascript.info/map-set

 

맵과 셋

 

ko.javascript.info

 
✏️작성코드
<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
복사했습니다!