인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

opnice12님의 프로필 이미지
opnice12

작성한 질문수

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

4. 모든 아나그램 찾기(Hash, sliding window : 시간복잡도 O(n))

안녕하세요 Slice Windoe 방식 질문입니다.

작성

·

14

·

수정됨

0

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        String s = in.nextLine();
        String s2 = in.nextLine();

        System.out.println(Solution.solution(s, s2));
    }
}
class Solution{
    public static int solution(String s , String s2){
        int ans = 0;
        HashMap<Character, Integer> map = new HashMap<>();
        HashMap<Character, Integer> map2 = new HashMap<>();
        for(char c : s2.toCharArray()){
            map2.put(c, map2.getOrDefault(c, 0) + 1);
        }
        for(int i = 0; i<s2.length(); i++){
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }
        if(map.equals(map2)){
            ans++;
        }
        for(int i = s2.length(); i < s.length(); i++){
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0)+1);
            if(map.get(s.charAt(i- s2.length())) == 1){
                map.remove(s.charAt(i- s2.length()));
            }else{
                map.put(s.charAt(i-s2.length()), map.get(s.charAt(i-s2.length())) - 1);
            }
            if(map.equals(map2)){
                ans++;
            }
        }
        return ans;
    }
}

전 강의에서는 항상 기존 b의 길이만큼 먼저 계산을 해주고 비교를 한후에 하나를 추가해주고 기존꺼를 제거하는 방식으로 저는 이해해를 해서 그런식으로 풀고 있었는데
강사님 코드 결론은 마지막에 b길이를 채워 주고나서 비교하고 나서 이전껄 빼고 새로운걸 추가시키고 비교하는 방식으로 하시는거 같은데 방식이 달라 어떤걸 더 봐야할지 모르겠습니다.

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
opnice12님의 프로필 이미지
opnice12

작성한 질문수

질문하기