백준(C언어) 풀이/문자열

백준(C) 1157번 단어 공부 풀이

개발윗미 2021. 7. 14. 17:57

C로 구현한 1157번 단어 공부 문제 풀이입니다.

#include <stdio.h>

int main() {
    char input[1000001];
    int spell[26] = {0,};
    int count=0;
    char num = '?';
    scanf("%s", input);
    for(int i=0; input[i]!='\0'; i++) {
        if(input[i] >= 'a')
            input[i] = input[i] - 32;
        spell[input[i]-65]++;
    }
    for(int j=0; j<26; j++){
        if(spell[j] > count) {
            count = spell[j];
            num = j;
        } else if(spell[j] == count)
            num = '?';
    }
    if(num != '?')
        printf("%c", num+65);
    else
        printf("?");
}

 

문자열을 입력받고 입력받은 값만큼 첫번째 반복문을 수행해줍니다. 입력 받은 각 문자가 'a'보다 크거나 같을 경우

 

10진수 32를 빼서 대문자로 저장해주고 정수형으로 이루어진 spell 배열의 각 자리의 값을 1씩 증가시켜줍니다.

 

여기까지 각 알파벳의 등장 횟수가 저장되었고 두번째 반복문에서 각 횟수를 비교하여 가장 큰 값의 자리를 뽑아내는

 

작업을 합니다. 문제에서 '가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.' 와 같은 조건이

 

있기 때문에 조건문에서 비교할 알파벳 등장횟수(spell[j])와 저장된 알파벳 등장횟수(count)가 같을 경우 문자형 변수

 

num에 '?' 를 저장합니다.

 

최종적으로 num값이 '?'가 아닐 경우 가장 많이 사용된 대문자 알파벳을 출력할 수 있도록 하고 그렇지 않을 경우에는

 

물음표가 출력될 수 있도록 합니다.


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

 

1157번: 단어 공부

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

www.acmicpc.net