반응형
📌강의 정리
이번에도 해쉬(맵)를 써서 알고리즘을 짠다.
처음 맵에는 str1의 값을 키에는 영문자를 밸류에는 그 개수를 누적으로 구해주고
그 다음에는 각각의 str1의 키값을 str2의 문자들로 비교하여 있으면 밸류를 -1해주고 없거나 그 개수가 0이 되었으면 answer를 NO로 바꿔준다.
📌느낀점
Map을 쓴 두번째 풀이였다.
솔직히 그냥 정렬 2번써서 비교하면 편하겠다라는 생각을 수도 없이 했지만
그러면 그냥 푸는 의미가 없으니 이 악물고 Map으로 풀었다.
Map이 익숙하지 않아서 시간이 좀 걸렸고 심지어 풀이도 내가 for문 3개로 강사님 풀이보다
for문이 한 개 더 많다.
그 이유는 나는 map을 2개 만들고 그 둘을 다시 비교했지만 강사님은 하나만 만들고
그 안에서 증감하며 비교했기 때문이다.
코드를 간결하게 짜는걸 항상 생각해야 한다.
//나의 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(str1, str2) {
let answer = "YES";
let myMap1 = new Map();
let myMap2 = new Map();
for (let x of str1) {
if (myMap1.has(x)) myMap1.set(x, myMap1.get(x) + 1);
else myMap1.set(x, 1);
}
console.log(myMap1);
for (let y of str2) {
if (myMap2.has(y)) myMap2.set(y, myMap2.get(y) + 1);
else myMap2.set(y, 1);
}
console.log(myMap2);
for (let [k, v] of myMap1) {
if (myMap2.get(k) !== v) answer = "NO";
}
return answer;
}
//반복문을 써서 str1과 str2의 각각의 키(A,B...)와 밸류(누적개수)의 맵을 만든다.
//반복문으로 둘을 비교해 일치하는지 확인한다.has() 사용
//객체 길이동안 다 true면 YES 아니면 NO이다.
let a = "AbaAeCe";
let b = "baeeACA";
console.log(solution(a, b));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(str1, str2) {
let answer = "YES";
let sH = new Map();
for (let x of str1) {
if (sH.has(x)) sH.set(x, sH.get(x) + 1);
else sH.set(x, 1);
}
for (let x of str2) {
if (!sH.has(x) || sH.get(x) == 0) return "NO";
sH.set(x, sH.get(x) - 1);
}
return answer;
}
let a = "AbaAeCe";
let b = "baeeACA";
console.log(solution(a, b));
</script>
</body>
</html>
반응형
'JS 알고리즘 문제풀이 > 섹션 5. 효율성(투포인터 알고리즘, 슬라이딩윈도우, 해쉬)' 카테고리의 다른 글
| 8.모든 아나그램 찾기(Hash & Sliding Window && Two Pointers Algorithm) (0) | 2022.06.21 |
|---|---|
| 6.학급 회장(Hash Map) (0) | 2022.06.18 |
| 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 |