본문 바로가기

알고리즘 문제 풀어보기

[백준 1152번] 단어의 개수 구하기 (문자열 문제)

단어의 개수


문제

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 들어가 있을까? 단 한 단어가 여러 번 들어가면 등장한 횟수만큼 모두 세어야 한다.


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


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


예시

입력 : The Curious Case of Benjamin Button

출력 : 6



이 문제를 접근한 방식으로는


1. 문자열에서 공백(띄어쓰기)의 개수를 받는다.

2. 공백의 수 + 1 = 단어의 개수


간단한 문제이겠거니 생각했지만 생각보다 예외처리할 문제들도 있고 나름 생각을 다시 하게 하는

문제였다.


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
#include <stdio.h>
#include <string.h>
#pragma warning(disable : 4996)
 
int main()
{
    char *= (char *)malloc(sizeof(char* 1000001);
    gets(c);
 
    int leng = strlen(c), n = 0;
 
    for (int i = 0; i < leng; i++)
    {
        if (c[i] == ' ')
        {
            //제외할 예외처리들 (시작과 끝이 공백일 경우, 연속으로 공백이 나올 경우
            if ((i != 0 && i != leng - 1&& !(c[i] == ' ' && c[i + 1== ' '))        
                n++;
        }
    }
    //모두 공백일 경우 결과: 0
    if (n == 0)
        printf("0\n");
    else
        printf("%d\n", n + 1);
 
    free(c);
    return 0;
}
cs


더 어려운 문제들도 계속해서 공부해보고 나중엔 알고리즘 경진대회 문제들도 도전해봐야겠다.