반응형
📌강의 정리
해쉬라는 알고리즘을 쓸건데 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>
반응형
'JS 알고리즘 문제풀이 > 섹션 5. 효율성(투포인터 알고리즘, 슬라이딩윈도우, 해쉬)' 카테고리의 다른 글
8.모든 아나그램 찾기(Hash & Sliding Window && Two Pointers Algorithm) (0) | 2022.06.21 |
---|---|
7.아나그램(Hash Map) (0) | 2022.06.20 |
5.최대 매출(Sliding Window) (0) | 2022.06.17 |
4.연속부분수열2(Two Pointers Algorithm) (0) | 2022.06.16 |
3.연속부분수열1(Two Pointers Algorithm) (0) | 2022.06.15 |