강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

vkfks8888님의 프로필 이미지
vkfks8888

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

8. 모든 아나그램 찾기(Hash & Sliding Window && Two Pointers Algorithm)

다른 방식으로 풀어봤습니다!

작성

·

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) 시간 복잡도를 달성해서일까요?

입력 데이터 크기에 영향을 받지 않아서일까요?

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

네. 잘하신 코드입니다. 

vkfks8888님의 프로필 이미지
vkfks8888

작성한 질문수

질문하기