인프런 커뮤니티 질문&답변
lt, rt 사용하지 않아도 괜찮을까요?
작성
·
170
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이런식으로 해도 괜찮을까요?
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이런식으로 해도 괜찮을까요?
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를 별도로 사용하지 않더라도 이러한 접근 방식으로 문제를 해결하는 것은 타당합니다.
고로 코드 작성 방식에 정답은 없으며, 제시해주신 방식으로도 충분히 문제를 해결할 수 있습니다. 결국 중요한 것은 알고리즘이 정확하게 동작하여 올바른 결과를 반환하는지입니다. 코드를 실행하여 기대하는 결과가 나오는지 테스트해 보시고, 문제의 조건에 맞게 정답을 잘 찾아내는지 확인해 보시기 바랍니다.





