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

C#을 사용해 문자열에서 가장 많이 나오는 문자를 구하는 방법

문자열에서 가장 많이 발생하는 문자란 다른 어떤 문자보다 더 자주 나타나는 문자를 의미합니다. 다음 예시를 통해 쉽게 이해할 수 있습니다.

문자열: apples are red
위 문자열에서 가장 많이 발생하는 문자는 'e'로, 3번 나타나며 다른 어떤 문자보다 발생 빈도가 높습니다.

C#을 사용하여 문자열에서 가장 많이 발생하는 문자를 구하는 프로그램은 다음과 같습니다.

예제 코드

using System;
namespace charCountDemo {
    public class Example {
        public static void Main() {
            String str = "abracadabra";
            int[] charCount = new int[256];
            int length = str.Length;
            for (int i = 0; i < length; i++) {
                charCount[str[i]]++;
            }
            int maxCount = -1;
            char character = ' ';
            for (int i = 0; i < length; i++) {
                if (maxCount < charCount[str[i]]) {
                    maxCount = charCount[str[i]];
                    character = str[i];
                }
            }
            Console.WriteLine("문자열: " + str);
            Console.WriteLine("가장 많이 발생하는 문자: " + character);
            Console.WriteLine("발생 횟수: " + maxCount);
        }
    }
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

문자열: abracadabra
가장 많이 발생하는 문자: a
발생 횟수: 5

코드 설명

이제 위 프로그램의 동작 원리를 단계별로 살펴보겠습니다.

1단계: 문자별 출현 횟수 세기

먼저 분석 대상 문자열 str은 "abracadabra"입니다. 크기가 256인 정수형 배열 charCount를 생성하는데, 이는 ASCII 테이블에 포함된 모든 문자를 인덱스로 다룰 수 있기 때문입니다. 이후 for 루프를 사용해 문자열을 한 글자씩 순회하면서 해당 문자에 대응되는 charCount 배열 요소의 값을 1씩 증가시킵니다. 이 과정은 다음 코드 조각에서 확인할 수 있습니다.

String str = "abracadabra";
int[] charCount = new int[256];
int length = str.Length;
for (int i = 0; i < length; i++) {
    charCount[str[i]]++;
}

2단계: 최대 출현 문자 찾기

정수형 변수 maxCount는 최대 출현 횟수를 저장하고, character 변수는 가장 많이 나타난 문자 값을 저장합니다. 두 값은 문자열을 다시 한 번 순회하는 for 루프와 비교 연산을 통해 결정됩니다. 현재까지의 최대 횟수보다 큰 출현 횟수를 가진 문자를 발견하면 maxCount와 character를 갱신하는 방식입니다.

int maxCount = -1;
char character = ' ';
for (int i = 0; i < length; i++) {
    if (maxCount < charCount[str[i]]) {
        maxCount = charCount[str[i]];
        character = str[i];
    }
}

3단계: 결과 출력

마지막으로 문자열, 최대 출현 횟수, 그리고 해당 문자를 화면에 출력합니다.

Console.WriteLine("문자열: " + str);
Console.WriteLine("가장 많이 발생하는 문자: " + character);
Console.WriteLine("발생 횟수: " + maxCount);

시간 복잡도

이 알고리즘은 문자열을 두 번 순회하므로 시간 복잡도는 O(n)이며, 고정 크기(256)의 배열만 사용하므로 공간 복잡도는 O(1)입니다. 따라서 문자열 길이가 길어져도 효율적으로 동작합니다.