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

C# 문자열에서 가장 자주 등장하는 문자 찾기 방법

문자열이 주어졌을 때 각 문자가 몇 번씩 등장하는지 계산하고, 그중 빈도가 가장 높은 문자를 찾는 프로그램을 C#으로 작성해 보겠습니다.

예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.

String s = "HeathLedger!";

먼저 각 문자의 등장 횟수를 저장할 새로운 배열을 생성합니다. ASCII 문자 집합 전체를 커버하기 위해 배열 크기를 256으로 지정합니다.

int[] cal = new int[maxCHARS];

다음으로 문자열과 배열을 매개변수로 받는 메서드를 만듭니다. 이 메서드는 문자열의 각 문자를 순회하면서 해당 문자에 대응하는 인덱스의 카운트 값을 1씩 증가시켜 각 문자의 출현 횟수를 계산합니다.

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

여기서 s[i]는 char 타입이지만 배열 인덱스로 사용되면 자동으로 정수형 ASCII 코드 값으로 변환된다는 점이 핵심입니다.

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

예제 코드

using System;
class Demo {
   static int maxCHARS = 256;
   static void calculate(String s, int[] cal) {
      for (int i = 0; i < s.Length; i++)
         cal[s[i]]++;
   }

   public static void Main() {
      String s = "thisisit!";
      int[] cal = new int[maxCHARS];
      calculate(s, cal);
      for (int i = 0; i < maxCHARS; i++)
         if (cal[i] > 1) {
            Console.WriteLine("Character " + (char)i);
            Console.WriteLine("Occurrence = " + cal[i] + " times");
         }
   }
}

출력 결과

Character i
Occurrence = 3 times
Character s
Occurrence = 2 times
Character t
Occurrence = 2 times

코드 동작 원리

  • maxCHARS = 256: ASCII 문자 집합 전체(0~255)를 인덱스로 다루기 위한 배열 크기입니다.
  • calculate 메서드: 문자열을 한 글자씩 순회하며 cal[s[i]]++ 연산으로 각 문자의 등장 횟수를 누적합니다. 시간 복잡도는 O(n)으로 매우 효율적입니다.
  • Main 메서드: 계산이 완료된 후 배열 전체를 순회하면서 등장 횟수가 1보다 큰 문자, 즉 중복해서 나타난 문자만 화면에 출력합니다.

실행 결과를 보면 "thisisit!" 문자열에서는 문자 'i'가 3번으로 가장 많이 등장했으며, 's'와 't'는 각각 2번씩 나타났습니다. 이처럼 카운팅 배열을 활용하면 추가적인 정렬 없이도 간단하게 문자별 빈도를 구할 수 있습니다.