algorithm
아나그램
juuuuuuun
2024. 5. 15. 18:07
설명
Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로
알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세요. 아나그램 판별시 대소문자가 구분됩니다.
입력
첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
단어의 길이는 100을 넘지 않습니다.
출력
두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.
예시 입력 1
AbaAeCe
baeeACA
예시 출력 1
YES
예시 입력 2
abaCC
Caaab
예시 출력 2
NO
소스 코드1
import java.util.HashMap;
import java.util.Scanner;
//아나그램
public class Main {
public static String solution(String s1, String s2) {
String ans = "YES";
HashMap<Character, Integer> map1 = new HashMap<>();
HashMap<Character, Integer> map2 = new HashMap<>();
//map1과 map2에 단어별로 개수 카운트
for (char c : s1.toCharArray()) {
map1.put(c, map1.getOrDefault(c, 0) + 1);
}
for (char c : s2.toCharArray()) {
map2.put(c, map2.getOrDefault(c, 0) + 1);
}
for (Character key : map1.keySet()) {
if (map1.get(key) != map2.get(key)) { //map1과 map2 key로 value를 비교해 다르면 NO 리턴
return "NO";
}
}
//정상적으로 다 넘어왔으면 아나그램이므로 YES 리턴
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
System.out.println(solution(s1, s2));
}
}
소스 코드 2
import java.util.HashMap;
import java.util.Scanner;
//아나그램 다른 풀이
public class Main {
public static String solution(String s1, String s2) {
String ans = "YES";
HashMap<Character, Integer> map = new HashMap<>();
//map에 단어별로 개수 카운트
for (char c : s1.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
for (char c : s2.toCharArray()) {
//c가 map에 존재하지 않거나 c의 값이 0이면 NO리턴
if (!map.containsKey(c) || map.get(c) == 0) {
return "NO";
}
//c가 0일 때 리턴하는 이유 : c가 0일경우 1을 뺐을 때 -1이 되기 때문
//-1 의 의미 : 중복되는 숫자가 1개 더 많다
map.put(c, map.get(c) - 1);
}
//정상적으로 다 넘어왔으면 아나그램이므로 YES 리턴
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
System.out.println(solution(s1, s2));
}
}