본문 바로가기

_BOJ/_C , C++

BOJ_1157:단어공부/C

반응형

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

 

1157번: 단어 공부

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

www.acmicpc.net

문제

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


입력

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

출력

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


예제 입력 1

Mississipi

예제 출력 1

?

예제 입력 2

zZa

예제 출력 2

Z


#include <stdio.h>
#include <ctype.h>

int main() {
	char word[1000001];
	int count[26]={0,};

    int i=0,wcount=0,howmany=0;
    char many;
    
    scanf("%s",word);
    
    for(i=0;word[i]!='\0';i++){
        wcount++;
    }
    
    for(i=0;i<wcount;i++){
        if(isupper(word[i])==0)
            word[i]=toupper(word[i]);
    }

    for(i=0;i<wcount;i++){
        count[word[i]-'A']++;
    }

    for(i=0;i<26;i++){
		if(count[i]>howmany){
			many=i+'A';
			howmany=count[i];
		}
		else if(count[i]==howmany){
			many='?';
		}
	}

    printf("%c\n",many);
    return 0;
}

#include <stdio.h>

#include <ctype.h>//아래 사용한 이유가 나옴.

int main() {

    char word[1000001];//널문자 들어갈 공간까지 확보

    int count[26]={0,};   //알파벳은 26글자

 

int i=0,wcount=0,howmany=0; //I 그 자체 /얼마나 문장이 긴지/얼마나 많이 나왔는지 횟수 세기

char many; //CHAR 많이 <--여기에 가장 많이 나온 알파벳 저장

 

scanf("%s",word); //단어를 스캔해서

 

for(i=0;word[i]!='\0';i++){ //WORD[I]값이 빈 값이 아닐때까지 계속 커지는 포문

wcount++; //단어세기 계속 추가해줌. (단어를 계속 읽어줌)

}

 

for(i=0;i<wcount;i++){ //위에 포문에서 구한 값까지 계속 커지는 포문

if(isupper(word[i])==0) //여기서 CTYPE.H 라이브러리를 쓴 이유가 나옴. ISUPPER가 대문자인지 확인함.

 ##isupper는 대문자일때1, 아닐경우 0을 반환함.

word[i]=toupper(word[i]); // 소문자들을 대문자로 만들어주는 역할을 함. 이리 해 준 이유는 소문자, 대문자라는 조건이 있기에 전부 대문자로 통일 해주려고 했음.

}

 

for(i=0;i<wcount;i++){ 다시 WCOUNT 값 보다 커질때까지 커지는 포문 만들어서

count[word[i]-'A']++; //COUNT 값에 A보다 큰 단어들을 계속 세줌.

}

 

for(i=0;i<26;i++){ //알파벳 전체 중에서

        if(count[i]>howmany){ //만약 COUNT[I]값이 얼마나 많은지? 값보다 크면

            many=i+'A'; //많은 값에 I를 저장해주고

            howmany=count[i]; //HOWMANY값에 그 카운트값을 갱신해줌.

        }

        else if(count[i]==howmany){ //하지만 값이 같아버리면

            many='?'; //그냥 ? 출력하게 해줌.

        }

//당연한 이야기이지만 위에 조건에 부합하지 않으면 그냥 넘어감.

    }

 

printf("%c\n",many); //이러면 MANY값에 가장 많이 나온 글자가 저장되어있을것임.

return 0;

}

반응형

'_BOJ > _C , C++' 카테고리의 다른 글

BOJ_18268 : COW GYMNASTICS, 소체조  (0) 2020.03.27
BOJ_2941 : 크로아티아 알파벳 C  (0) 2020.03.20
BOJ_2798 : 블랙잭 C  (0) 2020.03.17
BOJ_1085 : 직사각형에서 탈출 C  (0) 2020.03.11
[백준] BOJ_5622:다이얼 C  (0) 2020.02.23