본문 바로가기
PROGRAMMING CODE/C

[BAEKJOON] No.1157 C언어

by daye_ 2021. 10. 18.

단어공부

#include <stdio.h>
#include <string.h>

int main(){
    char str[1000000];
    int arr[26]={0,},max=0;
    scanf("%s",str);
    
    for(int i=0; i<strlen(str); i++){
        if(str[i]>='a') str[i] -=32;
        arr[str[i]-'A']++; // 수 저장
    }

    for(int i=1; i<26; i++){
        if(arr[max]>0 && arr[max]==arr[i]) { 
            max = -2; //63 ='?'
            break;
        }
        else if(max<arr[i]) max=i;
    }

    printf("%c\n",max+65);
    return 0;
}

잘돌아가는데 백준은 참 까다롭다.. 시간초과가 계속나옴.

아무래도 max찾는 부분이 이상한것같아서 고치는데 또 시간초과.

순서대로 고쳐보다가 마지막에 첫번째 for문의 strlen을 고쳤더니 드디어 돌아감 ㅠ

 

 

#include <stdio.h>

int main(){
    char str[1000000];
    int arr[26]={0,},max=0;
    scanf("%s",str);
    
    for(int i=0; str[i]!='\0'; ++i){ // strlen썼는데 코드에 계속 시간초과나서 이걸로 바꾸니까 드디어 됨 ㅠ
        if(str[i]>='a') str[i] -=32; //소문자를 대문자로 바꿔줌
        arr[str[i]-'A']++; // 인덱스 0인 'A'부터 인덱스 25인 'Z' 까지 갯수를 세줌
    }
    
    for(int i=1; i<26; ++i){ //max인덱스 찾기
        if(arr[max]<arr[i]) max=i;
    }
    
    int flag =0;
    for(int i=max+1; i<26; ++i){  //개수가 같은 문자가 있는지 검열
        if(arr[max] == arr[i]) {
            flag =1; 
            break;
        }
    }
    
    if (flag==1) printf("?\n"); //찾았으면 ?출력
    else printf("%c\n",max+65); //인덱스+60해줘서 다시 아스키코드의 알파벳 대문자로 출력되도록
    return 0;
}

'PROGRAMMING CODE > C' 카테고리의 다른 글

[BAEKJOON] No.2908 C언어  (0) 2021.10.18
[BAEKJOON] No.1152 C언어  (0) 2021.10.18
[BAEKJOON] No.2675 C언어  (0) 2021.10.18
[BAEKJOON] No.10809 C언어  (0) 2021.10.18
[BAEKJOON] No.11720 C언어  (0) 2021.10.18