작성
·
131
0
function handleCheck(sH, tH) {
for (const [key, value] of tH) {
//sH에 tH에 있는 값이 없으면 false return
if (!sH.has(key)) return false
//값이 같지 않으면 false return
if (value !== sH.get(key)) return false
}
return true
}
function solution(s, t) {
let answer = 0;
let tH = new Map();
let sH = new Map();
//t
for (const x of t) {
if (tH.has(x)) tH.set(x, tH.get(x) + 1);
else tH.set(x, 1)
}
//s 윈도우 생성
for (let i = 0; i < t.length - 1; i++) {
if (sH.has(s[i])) sH.set(s[i], sH.get(s[i]) + 1);
else sH.set(s[i], 1)
}
for (let i = sH.size; i < s.length; i++) {
//윈도우에 추가
if (sH.has(s[i])) sH.set(s[i], sH.get(s[i]) + 1);
else sH.set(s[i], 1)
//비교, sH랑 tH 사이즈 체크
if (sH.size === tH.size) {
//비교, sH랑 tH 값이 맞는지 체크 > 맞으면 카운트+
if (handleCheck(sH, tH)) answer++
}
//sH 앞에 값 빼기
//sH 맨 앞 = s에서 현재 index+1 - tH사이즈
let idx = i + 1 - tH.size;
//앞에 값 빼기
sH.set(s[idx], sH.get(s[idx]) - 1)
//뺀 값이 0이면 삭제
sH.get(s[idx]) === 0 && sH.delete(s[idx])
console.log('----------------------')
}
return answer;
}
let a = "bacaAacba";
let b = "abc";
console.log(solution(a, b));
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. wodms4525님, 질문하신 내용과 관련하여 답변드리겠습니다.
이 코드는 슬라이딩 윈도우(Sliding Window) 기법을 사용하여 특정 문자열 s
에서 문자열 t
의 모든 아나그램을 찾는 알고리즘입니다. lt
, rt
와 같은 변수를 사용하지 않아도 슬라이딩 윈도우의 주 목적인 문자열 내의 특정 범위를 조정하며 탐색하는 것을 잘 수행하고 있습니다.
단, for
문에서 사용된 i = sH.size; i < s.length; i++
조건 부분은 윈도우의 크기를 t
문자열의 길이만큼 증가시키며 문제를 해결하기 위한 의도로 보입니다. 비교 함수인 handleCheck(sH, tH)
를 통해 두 맵 sH
와 tH
의 각 키와 값을 비교하고 조건이 충족될 때 answer
를 증가시키는 로직이므로, lt
, rt
를 별도로 사용하지 않더라도 이러한 접근 방식으로 문제를 해결하는 것은 타당합니다.
고로 코드 작성 방식에 정답은 없으며, 제시해주신 방식으로도 충분히 문제를 해결할 수 있습니다. 결국 중요한 것은 알고리즘이 정확하게 동작하여 올바른 결과를 반환하는지입니다. 코드를 실행하여 기대하는 결과가 나오는지 테스트해 보시고, 문제의 조건에 맞게 정답을 잘 찾아내는지 확인해 보시기 바랍니다.