백준C(심화1)

쿵ㅇ양·2024년 1월 2일

알고리즘

목록 보기
1/18

백준1157-단어공부

푸는데 매우매우 오래걸림!!!!
flow에서 2번 생각못했음

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

flow

1.문자열의 소문자 전부 대문자로 바꿔주기
2.문자열에 들어있는 각각의 대문자 개수 세기!!!
3.count가 가장 큰거 max로 두기
4.max랑 같은 count[i] 찾기
case1 count[i]가 여러개일때 ?출력
case2 count[i]가 한개일때 그 대문자 출력
5. 출력할때 아스키코드 이용해서 'A' 더해주는거 잊지말기!!!

#include<stdio.h>

int main(){
    char str[1000000];
    int i = 0;
    
    scanf("%s", str);
    
    //char로 초기화할경우 100만자리까지 못셈(최대127) 따라서 int로 초기화
    int count[1000000] = {0};
    int num = 0;
    int result=0;
    int max = 0;
    
    //소문자 -> 대문자(아스키코드 주의)
    while (str[i]) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            str[i] = str[i] - 'a' + 'A';
        }
        
        //대문자 개수 세기
        count[str[i] - 'A']++;

        i++;
    }
    i=0;
    //알파벳 총 개수 26개
    //count가 가장 큰거 max
    while(i<26){
        if(max <= count[i])
            max=count[i];
        i++;
    }
    i=0;
    
    //max랑 같은 값을 가지는 count[i]찾기
    while(i<26){
        if(max==count[i]){
            num++;
            result=i;
        }
        i++;
    }
    if(num > 1)
        printf("?");
        
    //'A' 더해주는거 잊지말기(대문자로 바꿔주기 위해)
    else
        printf("%c", 'A'+result);
    
    return 0;
}
profile
개발을 공부하고 있는 대학생

0개의 댓글