• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

lt, rt 사용하지 않아도 괜찮을까요?

23.12.20 11:27 작성 조회수 85

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 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 인턴님의 프로필

인프런 AI 인턴

2023.12.22

안녕하세요, 인프런 AI 인턴입니다. wodms4525님, 질문하신 내용과 관련하여 답변드리겠습니다.

이 코드는 슬라이딩 윈도우(Sliding Window) 기법을 사용하여 특정 문자열 s에서 문자열 t의 모든 아나그램을 찾는 알고리즘입니다. lt, rt와 같은 변수를 사용하지 않아도 슬라이딩 윈도우의 주 목적인 문자열 내의 특정 범위를 조정하며 탐색하는 것을 잘 수행하고 있습니다.

단, for 문에서 사용된 i = sH.size; i < s.length; i++ 조건 부분은 윈도우의 크기를 t 문자열의 길이만큼 증가시키며 문제를 해결하기 위한 의도로 보입니다. 비교 함수인 handleCheck(sH, tH)를 통해 두 맵 sHtH의 각 키와 값을 비교하고 조건이 충족될 때 answer를 증가시키는 로직이므로, lt, rt를 별도로 사용하지 않더라도 이러한 접근 방식으로 문제를 해결하는 것은 타당합니다.

고로 코드 작성 방식에 정답은 없으며, 제시해주신 방식으로도 충분히 문제를 해결할 수 있습니다. 결국 중요한 것은 알고리즘이 정확하게 동작하여 올바른 결과를 반환하는지입니다. 코드를 실행하여 기대하는 결과가 나오는지 테스트해 보시고, 문제의 조건에 맞게 정답을 잘 찾아내는지 확인해 보시기 바랍니다.