아나그램 (해쉬)

Seungmin Lim·2022년 2월 9일
0

코딩문제연습

목록 보기
34/63

문제

나의풀이

import java.util.*;

class Main {
	public String solution(String a, String b) {
		String answer = "YES";
		HashMap<Character,Integer> map1 = new HashMap<>();
		HashMap<Character,Integer> map2 = new HashMap<>();
		for(char x : a.toCharArray()) map1.put(x, map1.getOrDefault(x, 0)+1);	
		for(char x : b.toCharArray()) map2.put(x, map2.getOrDefault(x, 0)+1);
		//탐색
		for(char key : map1.keySet()) {
			if(!map2.containsKey(key) || map2.get(key) != map1.get(key)) return "NO";
		}
		return answer;
	}

	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String a = kb.next();
		String b = kb.next();
		System.out.print(T.solution(a, b));
	}

}

카운팅을 통해 탐색하는 방법

import java.util.*;

class Main {
	public String solution(String a, String b) {
		String answer = "YES";
		HashMap<Character,Integer> map = new HashMap<>();
		for(char x : a.toCharArray()) map.put(x, map.getOrDefault(x, 0)+1);
		
		//탐색
		for(char x : b.toCharArray()) {
			if(!map.containsKey(x) || map.get(x) == 0) return "NO";
			map.put(x, map.get(x)-1);
		}
		return answer;
	}

	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String a = kb.next();
		String b = kb.next();
		System.out.print(T.solution(a, b));
	}

}

풀이방법

  1. 두 문자를 모두 hashmap에 따로 넣어서 두 map을 만들었다.
    그리고, 1번map과 2번map의 key값이 다르거나 key는 같아도 value값이 다를경우 NO를 리턴했다.

  2. 두개중 한쪽만 hashmap에 넣었다.
    만약 abaCC를 넣었다면,
    map = {'a':2, 'b':1, 'C':2} 이런 형태를 갖고있을것이다.
    그 상태에서 비교할 문자 하나하나를 key라고 생각하고 for문을 돌렸다.
    return "NO"를 해야할 경우는

    1) key값이 없는경우
    2) key값은 있지만 value가 0인경우

그 외) answer는 "YES"를 유지한채 해당 map.put(x, map.get(x)-1); 을 통해 key의 value를 -1 해주면 된다.

map = {'a':2, 'b':1, 'C':2}
비교문자 : Caaab일때,
C를 만나 map = {'a':2, 'b':1, 'C':1}
a를 만나 map = {'a':1, 'b':1, 'C':1}
a를 만나 map = {'a':0, 'b':1, 'C':1}
a를 만나 a가 0이므로 비교문자에 a가 더 많음을 알수있다.

핵심키워드

대표 문자열을 주고 여러 개의 문자열의 문자들을 비교할때,
내가 사용한방법은 전부 hashmap에 일일히 담아서 복잡하지만,
Counting하는 방법을 통해 한개의 대표 map을 설정하고 for문을 계속 돌리면서 해결이 가능할것같다!

0개의 댓글