스터디/알고리즘

[백준 1919] 애너그램 만들기

덩이 2025. 7. 30. 11:01

문제: 두 단어를 애너그램으로 만들기 위해 제거해야하는 문자의 최소 개수

(애너그램: 단어의 구성이 완전히 같은 단어)

 

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);
    }
}