문제: 두 단어를 애너그램으로 만들기 위해 제거해야하는 문자의 최소 개수
(애너그램: 단어의 구성이 완전히 같은 단어)
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
// 카운트 배열: 알파벳을 인덱스로 하면서 알파벳의 개수를 기록하는 배열
int[] str1_arr = new int[26];
int[] str2_arr = new int[26];
for(int i=0; i<str1.length(); i++){
str1_arr[str1.charAt(i) - 'a']++;
}
for(int j=0; j<str2.length(); j++){
str2_arr[str2.charAt(j) - 'a']++;
}
int count = 0;
for(int k=0; k<26; k++){
count += Math.abs(str1_arr[k]-str2_arr[k]);
}
System.out.println(count);
}
}
개선: 카운트 배열을 함수로 구현하기
import java.util.Scanner;
public class Main {
// 카운트 배열을 함수로 구현하기
public static int[] getStrCount(String str){
int[] count = new int[26];
for(int i=0; i<str.length(); i++){
count[str.charAt(i) - 'a']++;
}
return count;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
// 카운트 배열: 알파벳을 인덱스로 하면서 알파벳의 개수를 기록하는 배열
int[] str1_arr = getStrCount(str1);
int[] str2_arr = getStrCount(str2);
int count = 0;
for(int k=0; k<26; k++){
count += Math.abs(str1_arr[k]-str2_arr[k]);
}
System.out.println(count);
}
}
'스터디 > 알고리즘' 카테고리의 다른 글
[백준 1543] 문서 검색 (0) | 2025.07.30 |
---|---|
[백준 1157] 단어 공부 (0) | 2025.07.30 |
[백준 2744] 대소문자 바꾸기 (0) | 2024.08.06 |
[백준 11655] ROT13 (0) | 2022.06.21 |
[백준 4375] 1 (0) | 2022.05.15 |