2022/01/31) 6. 학급 회장(해쉬) [효율성(투포인터 알고리즘, 슬라이딩윈도우, 해쉬)]

굥굥이·2022년 2월 3일
0
post-thumbnail

1. 문제

<학급 회장(해쉬)>
: 학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 가 등록을 했다. 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성한다. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정한다.

2. 해결 방법

  1. Map을 생성한다. 그리고 map의 메소드인 set(key와 value 설정), get(해당 key의 value를 가져옴), has(해당 키의 존재유무를 알려줌)을 이용하여 문제를 푼다.
    어떤 로직이냐면 해당 키가 존재하지 않으면 해당 키의 값을 1로 설정하고, 만약 키가 존재한다면 해당하는 키의 값을 가져와서 1을 증가시키는 것이다.
  2. for..of문에서 [key, val]해서 객체분할느낌? 으로 받아올 수도 있다.

3. 정답

<script>
            function solution(s){  
                //new Map로 생성 / set(key와 value를 정해줄 수 있음) get(해당 key의 value를 가져옴 has(해당 키가 존재하는지 안하는지 알 수 있음)
                let answer = 0;
                let sH = new Map();
                for(let x of s){
                    if(!sH.has(x)) sH.set(x, 1);
                    else{
                        sH.set(x, sH.get(x) + 1);
                    }
                }
                let max = Number.MIN_SAFE_INTEGER;
                for(let [key, val] of sH){
                    if(val > max) {
                        max = val;
                        answer = key;
                    }
                }
                return answer;
            }
            let str="BACBACCACCBDEDE";
            console.log(solution(str));
        </script>

4. 내 코드와 비교 그리고 반성

곧 봄이다. 조금만 더 열심히 하자. 복습도 해야하고 갈 길이 멀다.

profile
아자아자 파이띵굥!

0개의 댓글