[BAEKJOON ONLINE JUDGE 1152번] 단어의 개수

단어의 개수 in C++

문제

  • 영어 대소문자와 공백으로만 구성된 하나의 문장이 주어질 때, 이 문장의 단어의 개수를 출력한다.

입력 데이터

  • 영어 대소문자와 공백으로만 구성된 하나의 문장
  • 입력 예
Minsu's algorithm study, using c++ or java

출력 데이터

  • 문장의 단어의 개수
  • 출력 예
7

조건

  • 단, 문장의 길이는 1,000,000자를 넘지 않고, 단어는 공백으로만 구분되며, 공백은 연속되지 않음

해결 방법

  • 문제의 조건으로 볼 때, 단어의 개수는 공백의 수와 밀접한 관련이 있다는 것을 알 수 있다.
    • 예를 들어 ‘A b’ 라면 공백은 1개이고, 단어는 2개이다.
    • ‘ A b’라면 공백은 2개이지만, 단어는 이전과 마찬가지로 2개이다.
    • ‘ A b ‘라면 공백은 3개이지만, 단어는 역시 2개이다.
  • 이 예시들을 통해 볼 때, 단어의 개수는 기본적으로 문장의 앞 뒤에 공백이 없을 때 공백 개수 + 1개가 단어의 개수이며, 문장 앞 뒤로 공백이 있을 때는 해당 공백의 수를 전체 공백의 수에서 빼주면 된다.
  • 아래의 코드를 보면 sentence[0]의 공백에 대한 count가 두 번 되는 경우(‘ ‘인 경우)가 있는데, 코드를 자세히 보면 해당 경우에도 제대로 세어진다는 것을 알 수 있을 것이다. 그 이유는 count가 1에서 마지막에 +1을 해주므로 2가 되는데, (C++11 소스 기준) if(sentence[0] == ' ') count--; 부분을 통해 count값이 1이 되고, if(sentence[sentence.size() - 1] == ' ') count--; 부분을 통해 count값이 0이 되기 때문이다.

코드

#include <iostream>
using namespace std;

int main()
{
    string sentence;
    int count = 0; // 단어 수

    getline(cin, sentence); // cin을 이용하여 공백을 포함한 string값을 입력 받음

    for(char c : sentence)
    {
        if(c == ' ') count++; // 공백의 수 count
    }
    count++; // '공백의 수 + 1 = 단어 수' 이므로 count를 1증가
    if(sentence[0] == ' ') count--; // 문장의 첫 글자가 공백이면 count--
    if(sentence[sentence.size() - 1] == ' ') count--; // 문장의 마지막 글자가 공백이면 count--

    cout << count << endl; // 단어 수 출력

    return 0;
}

문제 원본 링크

https://www.acmicpc.net/problem/1152

0%