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));
}
}
두 문자를 모두 hashmap에 따로 넣어서 두 map을 만들었다.
그리고, 1번map과 2번map의 key값이 다르거나 key는 같아도 value값이 다를경우 NO를 리턴했다.
두개중 한쪽만 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문을 계속 돌리면서 해결이 가능할것같다!