인프런 커뮤니티 질문&답변
다른 방식으로 풀어봤습니다!
작성
·
144
0
안녕하세요! 수업 잘듣고있습니다 :)
이번 문제를 혼자 풀어보았는데 괜찮은 코드인지 궁금하여 질문 남깁니다. 항상 감사합니다!^^
function compareMaps(tmp, sH) {
let sH1 = new Map();
for (let [key, val] of sH) {
sH1.set(key, val);
}
for (let x of tmp) {
if (!sH1.has(x) || sH1.get(x) === 0) return 0;
sH1.set(x, sH1.get(x) - 1);
}
return 1;
}
function solution(s, t) {
let answer = 0;
sH = new Map();
let len = t.length;
let tmp = s.slice(0, len);
for (let x of t) {
if (sH.has(x)) sH.set(x, sH.get(x) + 1);
else sH.set(x, 1);
}
if (compareMaps(tmp, sH)) answer++;
for (let i = len; i < s.length; i++) {
tmp = tmp.slice(1);
tmp = tmp + s[i];
if (compareMaps(tmp, sH)) answer++;
}
return answer;
}
let a = 'bacaAacba';
let b = 'abc';
console.log(solution(a, b));퀴즈
투 포인터 또는 슬라이딩 윈도우 기법이 중첩 반복문보다 효율적인 주된 이유는 무엇일까요?
더 적은 메모리를 사용해서일까요?
코드가 더 짧아져서일까요?
대부분의 경우 O(N) 시간 복잡도를 달성해서일까요?
입력 데이터 크기에 영향을 받지 않아서일까요?





