[C] 1157번: 단어 공부

[C] 1157번: 단어 공부
2026-03-07

문제#

https://www.acmicpc.net/problem/1157

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력#

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력#

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

풀이#

알파벳 26개의 개수를 배열에 저장한 뒤, 가장 큰 값을 찾으면 됩니다.
대소문자를 구분하지 않으므로 대문자와 소문자를 같은 인덱스에 누적합니다.
최댓값이 여러 개면 ?를 출력합니다.

코드#

#include <stdio.h>
int main() {
static char str[1000001];
int count[26] = {0};
int max = 0;
char answer = '?';
scanf("%s", str);
for (int i = 0; str[i] != '\0'; i++) {
if ('A' <= str[i] && str[i] <= 'Z') {
count[str[i] - 'A']++;
} else {
count[str[i] - 'a']++;
}
}
for (int i = 0; i < 26; i++) {
if (count[i] > max) {
max = count[i];
answer = (char)(i + 'A');
} else if (count[i] == max) {
answer = '?';
}
}
printf("%c\n", answer);
return 0;
}