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

C# 문자열에서 가장 많이 등장하는 문자 찾는 방법

C# 문자열에서 최다 출현 문자 구하기

문자열에서 가장 많이 등장하는 문자를 찾으려면, 주어진 문자열의 길이만큼 반복문을 수행하면서 각 문자가 나타난 횟수를 세어야 합니다.

이를 위해 각 문자의 출현 횟수를 저장할 정수 배열을 하나 선언합니다. 아스키(ASCII) 코드 값은 0~255 범위에 있으므로, 문자 자체를 배열의 인덱스로 사용해 손쉽게 카운트를 누적할 수 있습니다.

for (int i = 0; i < s.Length; i++)
    a[s[i]]++;

위 코드에서 사용된 변수들은 다음과 같습니다.

String s = "livelife!";
int[] a = new int[maxCHARS];

카운트가 끝나면 배열을 순회하면서 두 번 이상 등장한 문자와 그 횟수를 화면에 출력합니다.

for (int i = 0; i < maxCHARS; i++)
    if (a[i] > 1) {
        Console.WriteLine("Character " + (char) i);
        Console.WriteLine("Occurrence = " + a[i] + " times");
    }

전체 소스 코드는 다음과 같습니다.

예제 코드

using System;

class Program {

    static int maxCHARS = 256;

    static void display(String s, int[] a) {
        for (int i = 0; i < s.Length; i++)
            a[s[i]]++;
    }

    public static void Main() {
        String s = "livelife!";
        int[] a = new int[maxCHARS];
        display(s, a);

        for (int i = 0; i < maxCHARS; i++)
            if (a[i] > 1) {
                Console.WriteLine("Character " + (char) i);
                Console.WriteLine("Occurrence = " + a[i] + " times");
            }
    }
}

실행 결과

Character e
Occurrence = 2 times
Character i
Occurrence = 2 times
Character l
Occurrence = 2 times

코드 동작 원리

이 프로그램은 다음 세 단계로 동작합니다.

1. 카운팅 배열 초기화 — maxCHARS 상수(256) 크기의 정수 배열을 생성하여 모든 아스키 문자의 출현 횟수를 저장할 공간을 마련합니다.

2. 문자별 개수 집계 — display 메서드에서 문자열을 한 글자씩 순회하며 a[s[i]]++ 연산으로 해당 문자 인덱스의 값을 1씩 증가시킵니다.

3. 결과 출력 — Main 메서드에서 배열 전체를 검사하여 출현 횟수가 1보다 큰 문자만 골라 문자와 횟수를 함께 출력합니다.

"livelife!" 문자열에서는 'e', 'i', 'l'이 각각 2번씩 등장하므로 위와 같은 결과가 출력됩니다. 이 알고리즘의 시간 복잡도는 O(n)으로, 문자열을 한 번만 순회하면 되기 때문에 매우 효율적입니다.