백준 단계별로 풀어보기/문자열

백준 1157 단어 공부

jgs7784 2022. 10. 2. 21:01
728x90
반응형

단어 공부 

 

문제

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

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <string.h>
 
int main()
{
    char S[100000];
    int alphabet[26]={0,};
    
    //알파벳 A~Z 까지 26 65~90 97~122 (-32)
    scanf("%s",S);
    int slen = strlen(S);
    
    for(int i=0; i<slen; i++){
        //printf("%d",S[i]);
        if(S[i]>='a'){
            alphabet[S[i]-'a'++;
        }else{
            alphabet[S[i]-'A']++;
        }
    }
    int max = alphabet[0];
    int flag = 0;
    int result=0;
    for(int i=1; i<26; i++){
        
        if(max < alphabet[i]){
            max=alphabet[i];
            
            result = i;
        }
    }
    for(int i=0; i<26; i++){
        if(alphabet[i]==max){
            flag++;
        }
    }
    if(flag>1){
        printf("?\n");
    }else printf("%c",result + 97);
 
    return 0;
}
 
 
cs

 

가장 처음 작성해본 코드이다. 컴파일러에서 실행했을 때는 잘 됬는데 백준 제출시에는 런타임 에러가 났다.

쓸데 없는 반복문이 많은 것 때문 같아보여서 다시 시도..

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>
 
int main()
{
    char S[1000000];
    int alphabet[26]={0,};
    char result;
    //알파벳 A~Z 까지 26 65~90 97~122 (-32)
    scanf("%s",S);
    int slen = strlen(S);
    
    for(int i=0; i<slen; i++){
        //printf("%d",S[i]);
        if(S[i]>='a'){
            alphabet[S[i]-'a']++;
        }else{
            alphabet[S[i]-'A']++;
        }
    }
    int max = 0;
    
    
   
    for(int i=0; i<26; i++){
        if(alphabet[i]==max){
            result = '?';
        }else if(alphabet[i]>max){
            max = alphabet[i];
            result = 'A'+i;
        }
    }
    printf("%c",result);
    return 0;
 
    
}
cs

시행착오 끝에 다시 작성

최대값 구하는 과정을 가능한 단순하게

 

30 번째 줄의 result = 'A' + i 부분을

i+ 'A' 로 써놨다가 문자형이 안맞아서 한참 해맸다.

반응형