[알고리즘] 인프런 - 모든 아나그램 찾기

정은아·2024년 1월 9일
post-thumbnail

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

- Section 4 - 모든 아나그램 찾기 문제

내 풀이

import java.util.HashMap;
import java.util.Scanner;

public class HashMap_04 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		String a = sc.next();
		String b = sc.next();
		int answer = 0;
		
		HashMap<Character, Integer> aMap = new HashMap<>();
		HashMap<Character, Integer> bMap = new HashMap<>();
		
		for (char ch : b.toCharArray()) {
			bMap.put(ch, bMap.getOrDefault(ch, 0)+1);
		}
		
		int L = b.length()-1;
		
		for (int i = 0; i < L; i++) {
			aMap.put(a.charAt(i), aMap.getOrDefault(a.charAt(i), 0)+1);
		}
		
		int lt = 0;
		
		for (int rt = L; rt < a.length(); rt++) {
			aMap.put(a.charAt(rt), aMap.getOrDefault(a.charAt(rt), 0)+1);
			if (aMap.equals(bMap)) {
				answer++;
			}
			
			aMap.put(a.charAt(lt), aMap.get(a.charAt(lt))-1);
			
			if (aMap.get(a.charAt(lt)) == 0) {
				aMap.remove(a.charAt(lt));
			}
			lt++;
		}
		System.out.println(answer);
	}
}

느낀점

이번에도 답이 3이 나와야하는데 2가 나와서 한참을 들여다 봤는데, if문이 끝나고 lt++; 하는게 맞았다. 중괄호와 순서를 좀 더 신경쓰자!!

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글