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)으로, 문자열을 한 번만 순회하면 되기 때문에 매우 효율적입니다.