프로그래밍/백준

문자열문자열2 백준 1157 단어공부 -C언어

량아이 2022. 9. 22. 00:18

문자열이 문자열 했다!!!!

소문자와 대문자에 대해 어떻게 다뤄야할지 toupper를 사용해야 할지 고민하고 있을 때 친구가 이 문제 풀었다길래 어떤식으로 풀었냐고 물어보니 만약 소문자가 나오면 아스키코드 -32를 해 풀었다고 한다.

상당히 똑똑한 친구인거 같다.

<백준1157>
#include <stdio.h>
#include <string.h>
int main(){
    char a[1000001];
    int b[100]={-1,}, result=0, cnt=0, t=0;
    scanf("%s",a);
    int len = strlen(a);
    for(int i=0; i<len; i++){
        if(a[i]>91){ //소문자일경우 대문자로 변환
            a[i]-=32; 
        }
        for(int j=65; j<91;j++){
            if(j==a[i]){ //아스키코드와 비교 후 ++
                b[j]++;
                break;
            }
        }
    }
    
    for(int j=65; j<91;j++){
        if(t<b[j]) { //가장 많은 개수 찾기
            t=b[j]; 
            result = j;
            cnt=0;}
        else if (t==b[j]) cnt++; //단독 우승인가 판단
    }
    if(cnt>0) printf("?"); //가장 많이 쓰인 알파벳이 두개 이상일 경우 ?출력
    else printf("%c",result);
}

솔직히 바로 풀리진 않았고 우여곡절 말이 많았지만 내가 해냈다는 게 중요하지 중간과정이 중요한게 아니다.

사소한 문제는 넘어가기로 하자