문자열에서 가장 많이 발생하는 문자란 다른 어떤 문자보다 더 자주 나타나는 문자를 의미합니다. 다음 예시를 통해 쉽게 이해할 수 있습니다.
문자열: 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)입니다. 따라서 문자열 길이가 길어져도 효율적으로 동작합니다.