© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 6996 - 애너그램

2024-01-11
BOJ
브론즈 I
java
원본 문제 보기
구현
문자열
정렬

문제

BOJ 6996 - 애너그램

두 단어가 주어질 때, 애너그램(같은 문자로 구성)인지 판별하라.

입력

첫째 줄에 테스트 케이스 수 T, 이후 T줄에 두 단어가 공백으로 구분되어 주어진다.

출력

각 케이스마다 "X & Y are anagrams." 또는 "X & Y are NOT anagrams."를 출력한다.

예제

입력출력
3 blather lathber clap slap race careblather & lathber are anagrams. clap & slap are NOT anagrams. race & care are anagrams.

풀이

두 문자열을 각각 문자 단위로 정렬한 뒤 비교하여 애너그램 여부를 판별한다.

  1. 각 문자열을 split("")으로 문자 배열로 분리한다
  2. 두 배열을 각각 사전순 정렬한다
  3. 정렬 결과가 같으면 애너그램, 다르면 아니다

핵심 아이디어: 애너그램은 같은 문자 구성이므로, 정렬하면 동일한 배열이 된다.

코드

package day749;
 
import java.io.*;
import java.util.*;
 
public class Day709BOJ6996애너그램 {
 
  public static void main(String[] args) throws Exception {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
    int inNum = Integer.parseInt(bf.readLine());
 
    StringTokenizer st;
    StringBuilder sb = new StringBuilder();
 
    if (inNum < 100) {
      for (int i = 1; i <= inNum; i++) {
        st = new StringTokenizer(bf.readLine(), " ");
        String a1 = st.nextToken();
        String a2 = st.nextToken();
 
        String[] a1Arr = a1.split("");
        Arrays.sort(a1Arr);
        String[] a2Arr = a2.split("");
        Arrays.sort(a2Arr);
 
        sb.append(a1 + " & " + a2);
        sb.append(
            (Arrays.toString(a1Arr).equals(Arrays.toString(a2Arr)))
                ? " are anagrams.\n"
                : " are NOT anagrams.\n");
      }
      bw.write(String.valueOf(sb));
    }
 
    bw.flush();
    bf.close();
    bw.close();
  }
}

복잡도

  • 시간: O(T * L log L) - L은 문자열 길이
  • 공간: O(L)