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

C#으로 두 문자열이 서로의 아나그램인지 확인하는 방법

아나그램(Anagram)이란 한 문자열의 문자들을 재배열하여 다른 문자열을 만들 수 있는 경우를 말합니다. 즉, 두 문자열에 포함된 문자의 종류와 개수는 같지만 문자의 순서는 달라도 되는 관계입니다.

아나그램 판별 원리

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

string str1 = "silent";
string str2 = "listen";

두 문자열은 모두 s, i, l, e, n, t로 구성되어 있으므로 서로 아나그램입니다. C#에서 이를 확인하려면 다음 단계를 따릅니다.

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

대소문자 차이로 인한 오류를 방지하기 위해 ToLower()로 모두 소문자로 만든 뒤, ToCharArray()로 문자 배열로 변환합니다.

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

2단계: 문자 배열 정렬

Array.Sort() 메서드를 사용해 두 배열을 오름차순으로 정렬합니다. 정렬 후에는 두 문자열이 아나그램이라면 완전히 동일한 배열이 됩니다.

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

3단계: 정렬된 배열을 다시 문자열로 변환

string val1 = new string(ch1);
string val2 = new string(ch2);

4단계: 두 문자열 비교

정렬된 두 문자열이 동일하다면 원래 문자열들은 서로 아나그램입니다.

전체 예제 코드

using System;

public class Demo {
    public static void Main () {
        string str1 = "silent";
        string str2 = "listen";
        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("두 문자열은 아나그램입니다.");
        } else {
            Console.WriteLine("두 문자열은 아나그램이 아닙니다.");
        }
    }
}

실행 결과

두 문자열은 아나그램입니다.

참고 사항

이 방식의 시간 복잡도는 정렬에 의해 O(n log n)입니다. 더 빠른 성능이 필요하다면 각 문자의 등장 횟수를 세는 해시맵(Dictionary) 기반 접근(O(n))도 고려할 수 있습니다. 또한 공백과 문장부호를 무시해야 하는 경우라면 비교 전에 해당 문자들을 제거하는 전처리 과정을 추가하면 됩니다.