아나그램이란?
아나그램(Anagram)은 한 문자열에 포함된 문자들을 재배열하여 다른 문자열을 만들 수 있는 관계를 의미합니다. 즉, 두 문자열이 동일한 문자들로 구성되어 있으면서 문자의 순서만 다른 경우를 말합니다.
예를 들어, 다음 두 문자열을 살펴보겠습니다.
string str1 = "heater"; string str2 = "reheat";
"heater"와 "reheat"는 모두 h, e, a, t, e, r로 이루어져 있으므로 서로 아나그램 관계입니다.
아나그램 확인 절차
C#에서 두 문자열이 아나그램인지 확인하는 가장 일반적인 방법은 다음 세 단계로 진행됩니다.
- 두 문자열을 소문자로 변환한 뒤 문자 배열(char 배열)로 변환합니다.
- 각 문자 배열을 오름차순으로 정렬합니다.
- 정렬된 배열을 다시 문자열로 변환하여 서로 비교합니다.
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)으로 동작하며, 대소문자 구분 없이 비교해야 하는 경우에도 유용하게 활용할 수 있습니다.