Algorithm/Algorithm 문제

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

lala9663 2023. 5. 20. 01:51

https://www.acmicpc.net/problem/1919

 

1919번: 애너그램 만들기

두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs

www.acmicpc.net

 

간만에 백준에 들어가서 문제를 풀었다. 기본기를 다시 다져야겠다는 생각으로 풀었는데 단순하게 생각하면 매우 쉽게 풀리는 문제였다.

 

public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));

        String a = br.readLine();
        String b = br.readLine();

        int[] c = new int[26];
        int[] d = new int[26];

        for (int i = 0; i < a.length(); i++) {
            c[a.charAt(i) - 'a']++;
        }
        for (int i = 0; i < b.length(); i++) {
            d[b.charAt(i) - 'a']++;
        }
        int cnt = 0;
        for (int i = 0; i < 26; i++) {
            if(c[i] > d[i]){
                cnt += c[i] - d[i];
            } else if (c[i] < d[i]) {
                cnt += d[i] - c[i];
            }
        }
        System.out.println(cnt);
    }

이렇게 구현을 했지만 구현하고 생각해보니 조금 더 간단한 방법이 있었다.

if 문을 써서 c[i] 가 d[i] 보다 클때 작을때로 비교한 이유가 양수로 하기 위함이였다.


하지만 Math.abs 를 사용하면 절댓값을 반환 하는 역할이기 때문에

for (int i = 0; i < 26; i++) {
        cnt += Math.abs(c[i] - d[i]);
    }

 

이렇게 사용해도 될 것 같다.