본문 바로가기
코딩테스트 준비/백준

[백준] 6996번 - 애너그램 [Java]

by mwzz6 2025. 1. 14.

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

 

[백준] 6996번 - 애너그램 [Java]
[백준] 6996번 - 애너그램 [Java]


1.  아이디어

 

애너그램은 두 문자열에 등장한 각 알파벳의 개수가 동일함을 이용해서 해결할 수 있다.


2. 문제풀이

 

알파벳 소문자가 등장한 개수를 기록하는 카운팅 배열을 선언해서 A 단어에 등장한 알파벳의 개수를 더해주고 B 단어에 등장한 알파벳의 개수를 빼줬다. 두 단어가 애너그램 관계라면 카운팅 배열의 모든 값이 0이어야 함을 이용해서 구현했고 반복문 라벨링을 활용해서 바로 빠져나오게 구현했다.


3. 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int T = Integer.parseInt(br.readLine());

        out:
        for (int tc = 1; tc <= T; tc++) {
            st = new StringTokenizer(br.readLine());

            char[] str1 = st.nextToken().toCharArray();
            char[] str2 = st.nextToken().toCharArray();

            int[] cntArr = new int[26];
            for (char c : str1) {
                cntArr[c - 'a']++;
            }
            for (char c : str2) {
                cntArr[c - 'a']--;
            }

            for (int cnt : cntArr) {
                if (cnt != 0) {
                    sb.append(str1).append(" & ").append(str2).append(" are NOT anagrams.\n");
                    continue out;
                }
            }

            sb.append(str1).append(" & ").append(str2).append(" are anagrams.\n");
        }

        bw.write(sb.toString());
        bw.flush();
    }
}

4. 후기