YunDev

[C]백준 1157번 - 풀이 본문

Programming/Baekjoon Program

[C]백준 1157번 - 풀이

S준 2024. 1. 8. 13:30

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

 


 

#include <stdio.h>
#include <string.h>
#include <ctype.h> // toupper 함수 사용을 위해

int main() {
    char str[1000000] = "";
 	int frequency[26] = {0};  // 알파벳 빈도를 저장할 배열
    int maxFrequency = 0;     // 가장 높은 빈도
    char maxChar;             // 가장 많이 사용된 알파벳


    scanf("%s", str);

    int len = strlen(str);
    for (int i = 0; i < len; i++) {
        char ch = toupper(str[i]);
        if (ch >= 'A' && ch <= 'Z') {
            int index = ch - 'A';
            frequency[index]++;
            if (frequency[index] > maxFrequency) {
                maxFrequency = frequency[index];
            }
        }
    }

    int countMaxChar = 0;
    char maxChar = '?';
    for (int i = 0; i < 26; i++) {
        if (frequency[i] == maxFrequency) {
            countMaxChar++;
            if (countMaxChar > 1) {
                maxChar = '?';
                break;
            }
            maxChar = 'A' + i;
        }
    }

    printf("%c\n", maxChar);

    return 0;
}

 

  • 풀이 : 대소문자를 구분하지 않고, 각 알파벳의 빈도를 세어서 가장 많이 나타난 알파벳을 찾기 위해서
    26개의 요소를 가진 배열을 초기화하고, 문자열을 입력받았을 때 문자의 수만큼 반복문을 돌면서 대문자로 변환 후 해당 알파벳의 빈도수를 증가시킵니다. 따라서 maxFrequency는 현재 최대 빈도수를 가지고 있습니다.
    그 다음, 만약 최대 빈도수를 가진 알파벳이 여러개라면 "?"를 출력해야 하기 때문에 다시 반복문을 돌며 모든 알파벳의 빈도를 다시 확인하여(frequency[i] == maxFrequency) 가장 높은 빈도를 가진 알파벳의 개수를 세고 만약 여러 개라면 "?"를 출력하게 만듭니다.
    최대빈도수를 가진 알파벳이 하나라면 그 알파벳이 출력되겠죠.

'Programming > Baekjoon Program' 카테고리의 다른 글

백준 2480번[C] - 상세 풀이  (2) 2024.01.10
백준 2525번[C] - 상세 풀이  (0) 2024.01.09
백준 11382번[C] - 풀이  (3) 2024.01.04
백준 10988번[C] - 상세 풀이  (1) 2024.01.04
백준 10817번 (java)  (0) 2020.05.07