BAEKJOON/단계별로 풀어보기

[BOJ] 1157번 : 단어 공부

말하는 알감자 2022. 8. 3. 23:54

🔒 문제

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

⌨ 입력

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

🖨 출력

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

📚 예제

Ex1)

Mississipi

?

Ex2)

zZa

Z

Ex3)

z

Z

Ex4)

baaa

A

Ex5)

aabbccc

C

위의 예를 생각 못해서 2번이나 틀렸다,,

🔑 c언어 코드


#include

int main()
{
    char* string; //문자열 저장
    string = malloc(sizeof(char) * 1000000); // 메모리 낭비하기 싫어서 동적 할당
    scanf("%s", string);

    int n[26] = { 0, }; // 알파벳 A~Z까지 사용 빈도 표시
    int max = 0; // 문자 최대 사용 빈도 수 
    int index; // 최대 사용 문자의 인덱스 저장
    int i = 0;
    int t = 0; // 같은 빈도인 수 검사

    while (string[i] != '\0')
    {
        int k = (int)string[i];
        if (k >= 97)
            k -= 97;
        else
            k -= 65;
        n[k]++;
        if (max < n[k]) // 최대 빈도 수 구하기
            max = n[k];
        i++;
    }

    for (i = 0; i < 26; i++) // 같은 빈도인 문자 검사!
        if (max == n[i])
        {
            t++;
            index = i;
        }

    if (t > 1)
        printf("?");
    else
        printf("%c", index + 65);

    return 0;
}

'BAEKJOON > 단계별로 풀어보기' 카테고리의 다른 글

[BOJ] 2908번 : 상수  (0) 2022.08.04
[BOJ] 1152번 : 단어의 개수  (0) 2022.08.03
[BOJ] 2675번 : 문자열 반복  (0) 2022.08.02
[BOJ] 10809번 : 알파벳 찾기  (0) 2022.08.02
[BOJ] 11720번 : 숫자의 합  (0) 2022.08.02