[C] BOJ 1157번 단어공부

yeopto·2022년 1월 18일
0

Algorithm

목록 보기
8/11
post-thumbnail

출처

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으로 초기화 안 시켜줘서 계속 틀렸다고 떴다. 변수를 선언하고 내버려두지 말자.

profile
https://yeopto.github.io로 이동했습니다.

0개의 댓글