JS 알고리즘 문제풀이/섹션 5. 효율성(투포인터 알고리즘, 슬라이딩윈도우, 해쉬)

6.학급 회장(Hash Map)

crab. 2022. 6. 18. 08:47
반응형

📌강의 정리

해쉬라는 알고리즘을 쓸건데 js에서는 이 해쉬를 Map객체로 쉽게 표현할 수 있다.

  • new Map() – 맵을 만듭니다.
  • map.set(key, value) – key를 이용해 value를 저장합니다.
  • map.get(key) – key에 해당하는 값을 반환합니다. key가 존재하지 않으면 undefined를 반환합니다.
  • map.has(key) – key가 존재하면 true, 존재하지 않으면 false를 반환합니다.
  • map.delete(key) – key에 해당하는 값을 삭제합니다.
  • map.clear() – 맵 안의 모든 요소를 제거합니다.
  • map.size – 요소의 개수를 반환합니다.

우리가 중복을 제거할때 썼던 객체는 여기서 key의 중복을 카운트하지 않는 Set객체이다.

이 맵을 이용하여 Map을 만들고 set으로 문자열의 값들을 키값으로, 넣을때마다 value는 ++로 설계해준다음 문자열반복이 끝나면 다시 반복하며 max값을 찾고 get으로 max를 출력한다.

 

📌느낀점

나는 Set을 이용해서 Map()과 비슷한 기능을 하는 알고리즘을 구현했는데 그 과정이 이렇게

따로 있다는게 너무 좋았다.

이제는 새로운 무기가 생긴 것 같다.

좀 더 다양한 것들을 쉽게 풀 수 있을 것 같아 해쉬문제들이 아주 살짝은 기대도 된다.

요즘은 코딩이 재밌다.

 

//나의 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer;
        const set = new Set(s);
        const setArr = [...set];
        setArr.sort();
        let arr = Array.from(
          { length: setArr.length },
          (v, i) => (i = setArr[i])
        );
        let arr2 = Array.from({ length: arr.length }, (v, i) => (i = 0));
        for (let i = 0; i < s.length; i++) {
          arr2[s[i].charCodeAt() - 65]++;
        }
        for (let j = 0; j < arr2.length; j++)
          if (arr2[j] === Math.max(...arr2)) answer = arr[j];
        return answer;
      }
      //처음에 길이 5인 배열을 만들고
      //A가 나오면 [0], B가 나오면 [1]을 카운트해준다.
      //제일높은 숫자 or (전체길이의 절반)의 인덱스를 답으로 한다.
      let str = "BACBACCACCBDEDEFGGGGGGG";
      console.log(solution(str));
    </script>
  </body>
</html>
//강사님 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer;
        let sH = new Map();
        for (let x of s) {
          if (sH.has(x)) sH.set(x, sH.get(x) + 1);
          else sH.set(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>
  </body>
</html>
반응형