Algorithm/BaekJoon

[백준] 1919: 에너그램 만들기

하노정 2023. 8. 3. 22:21

문제

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

 

1919번: 애너그램 만들기

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

www.acmicpc.net

문제 풀이

1. 입력받은 두 문자열의 알파벳 개수를 저장할 두 개의 int형 배열(알파벳 수만큼의 크기)을 선언한다.

2. 입력받은 두 문자열을 전부 문자 배열로 바꾼다.

3. 전부 소문자이기에 대/소문자를 구별할 필요는 없으며, int형 배열 인덱스'문자 배열의 아스키 코드 값'을 이용해 접근한다.

4. 두 개의 int형 배열을 돌면서 값을 비교해 개수가 같은 것 외에는 모두 차이를 카운팅 해야 한다 -> 인덱스마다 두 배열 값의 차이(절댓값)를 Math.abs 함수를 이용해 구한 후 카운팅 하면 된다.

코드

import java.util.Scanner;

public class BOJ1919 {
    public static void main(String[] args) {
        int[] arr1 = new int[26]; // 초기값 0
        int[] arr2 = new int[26];

        Scanner sc = new Scanner(System.in);
        char[] str1 = sc.nextLine().toCharArray();
        char[] str2 = sc.nextLine().toCharArray();

        int count = 0;

        for (int i=0; i<str1.length; i++) {
            arr1[str1[i] - 'a']++; // 문자를 정수로 인식하게 하면, 그게 알파벳 배열의 인덱스
        }
        for (int i=0; i<str2.length; i++) {
            arr2[str2[i] - 'a']++;
        }

        for (int i=0; i<26; i++) {
                count += Math.abs(arr1[i] - arr2[i]); // 절댓값 구하는 함수
        }

        System.out.println(count);
    }
}

'Algorithm > BaekJoon' 카테고리의 다른 글

[백준] 9020: 골드바흐의 추측  (0) 2023.02.14
[백준] 1193: 분수찾기  (0) 2023.02.10
[백준] 2292: 벌집  (0) 2023.02.10
[백준] 2941: 크로아티아 알파벳  (0) 2023.02.08
[백준] 1157: 단어 공부  (0) 2023.02.08