본문 바로가기
백준 코딩테스트/6. 문자열

1152) 단어의 개수 (c)

by xortl98 2020. 9. 30.
728x90

단어의 개수 성공분류

시간 제한메모리 제한제출정답맞은 사람정답 비율

2 초 128 MB 131449 35024 26907 27.212%

문제

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

출력

첫째 줄에 단어의 개수를 출력한다.

예제 입력 1 복사

The Curious Case of Benjamin Button

예제 출력 1 복사

6

예제 입력 2 복사

Mazatneunde Wae Teullyeoyo

예제 출력 2 복사

3

예제 입력 3 복사

Teullinika Teullyeotzi

예제 출력 3 복사

2


소스

#include<stdio.h>
#include<string.h>
int main() //공백 아스키코드 32 
{
    char str[1000000];                //%s 사용하면 띄어쓰기 하면 거기까지 밖에 저장안됨 ex)abc def 하면 abc까지 저장됨
    scanf("%[^\n]", str, 10000);    //대신 %[^\n] 사용하면 엔터를 제외한 모든 수를 저장함 
    char blank = 32;                  //공백 ASCII코드 10진수 32 
    int len = strlen(str);            // 입력한 문자열 수 저장 
    int i, count = 0;                       //i=for문 변수 count=단어 갯수 ;
    for (i = 0; i < len; i++) //문자열 길이만큼 반복
    {
        if (str[i] == blank && str[i - 1] >= blank) //만약 문자열 실행중 공백일 때 공백 전값에 단어가 있을 때 실행 
        {                                         //&& 전 값이 소문자나 대문자가 나왔다면    
            count++;
        }
    }
    if (count > 0 && str[len - 1] != blank) count++;   //맨 마지막 단어는 포함 안되서 넣어준거임 
    if (count == 0)     
    {
        for (i = 0; i < len; i++)    
        {
            if (str[i] != blank && str[i])   //단어가 하나만 있을 때 
            {
                count = 1;
            }
        }
    }   
    printf("%d", count);
}

'백준 코딩테스트 > 6. 문자열' 카테고리의 다른 글

5622) 다이얼 (c)  (0) 2020.09.30
2908) 상수 (c)  (0) 2020.09.30
1157) 단어 공부 (c)  (0) 2020.09.30
2675) 문자열 반복 (c)  (0) 2020.09.30
10809) 알파벳 찾기 (c)  (0) 2020.09.30