출처
BOJ
https://www.acmicpc.net/problem/1157
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
나의 풀이
#include <stdio.h>
#include <string.h>
int main(void) {
char str[1000000]; // 1000000 자릿수까지가 최대
int cnt[26] = {0, }; // 인덱스 순을 이용할거라 알파벳 순으로 26개크기의 배열 선언
int len, i, j, max, maxidx = 0;
int checkalp = 0; // cnt에 max랑 같은 요소들이 있는지 확인하기 위해
scanf("%s", str);
len = strlen(str);
for (i = 'a'; i <= 'z'; i++) {
for (j = 0; j < len; j++) {
if (i == str[j]) {
cnt[i - 'a']++; // 'a' = 아스키로 97
}
}
}
for (i = 'A'; i <= 'Z'; i++) {
for (j = 0; j < len; j++) {
if (i == str[j]) {
cnt[i - 'A']++; // 'A' = 아스키로 65
}
}
}
max = cnt[0];
for (i = 0; i < 26; i++) {
if (max < cnt[i]) {
max = cnt[i];
maxidx = i;
}
}
for(i = 0; i < 26; i++) {
if (max == cnt[i]) {
checkalp++;
}
}
if (checkalp > 1) {
printf("?\n"); // 하나 보다 많으면 여러개니까 "?" 출력
} else {
printf("%c", maxidx + 'A'); // 대문자로 출력해야하니까 maxidx에 'A'를 더해서 문자 출력시키면 됨.
}
return 0;
}
출력은 잘 되었지만, 채점에서 maxidx를 0으로 초기화 안 시켜줘서 계속 틀렸다고 떴다. 변수를 선언하고 내버려두지 말자.