Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#으로 두 단어가 아나그램인지 확인하는 방법

아나그램이란?

아나그램(Anagram)은 한 문자열에 포함된 문자들을 재배열하여 다른 문자열을 만들 수 있는 관계를 의미합니다. 즉, 두 문자열이 동일한 문자들로 구성되어 있으면서 문자의 순서만 다른 경우를 말합니다.

예를 들어, 다음 두 문자열을 살펴보겠습니다.

string str1 = "heater";
string str2 = "reheat";

"heater"와 "reheat"는 모두 h, e, a, t, e, r로 이루어져 있으므로 서로 아나그램 관계입니다.

아나그램 확인 절차

C#에서 두 문자열이 아나그램인지 확인하는 가장 일반적인 방법은 다음 세 단계로 진행됩니다.

  1. 두 문자열을 소문자로 변환한 뒤 문자 배열(char 배열)로 변환합니다.
  2. 각 문자 배열을 오름차순으로 정렬합니다.
  3. 정렬된 배열을 다시 문자열로 변환하여 서로 비교합니다.

1단계: 문자열을 문자 배열로 변환

ToLower() 메서드로 대소문자 차이를 없애고, ToCharArray() 메서드로 문자 배열을 생성합니다.

char[] ch1 = str1.ToLower().ToCharArray();
char[] ch2 = str2.ToLower().ToCharArray();

2단계: 문자 배열 정렬

Array.Sort() 메서드를 사용해 두 배열을 알파벳 순으로 정렬합니다. 두 문자열이 아나그램이라면 정렬 결과는 반드시 동일해야 합니다.

Array.Sort(ch1);
Array.Sort(ch2);

3단계: 전체 예제 코드

정렬이 완료되면 new string() 생성자를 사용해 배열을 문자열로 변환하고, 두 값을 비교하여 최종 결과를 출력합니다.

예제

using System;

public class Demo {
   public static void Main () {
      string str1 = "heater";
      string str2 = "reheat";
      char[] ch1 = str1.ToLower().ToCharArray();
      char[] ch2 = str2.ToLower().ToCharArray();
      Array.Sort(ch1);
      Array.Sort(ch2);
      string val1 = new string(ch1);
      string val2 = new string(ch2);

      if (val1 == val2) {
         Console.WriteLine("Both the strings are Anagrams");
      } else {
         Console.WriteLine("Both the strings are not Anagrams");
      }
   }
}

출력 결과

Both the strings are Anagrams

정렬 후 두 문자열이 완전히 동일하므로, "heater"와 "reheat"가 서로 아나그램임을 확인할 수 있습니다. 이 방법은 시간 복잡도 O(n log n)으로 동작하며, 대소문자 구분 없이 비교해야 하는 경우에도 유용하게 활용할 수 있습니다.