티스토리 뷰

알고리즘

[1152] 단어의 개수

홍복치 2018. 5. 9. 02:56

 

문제

 

영어 대소문자와 띄어쓰기만으로 이루어진 문장이 주어진다. 이 문장에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문장이 주어진다. 이 문장의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다.

예제 입력: The Curious Case of Benjamin Button

 

 

 

문제 해석

 

The Curious Case of Benjamin Button

단어-단어 사이 공백은 1개로 제한

앞 뒤 공백도 1개 밖에 안됌

 

공백 The Curious Case of Benjamin Button 공백(O) 

공백 공백 The Curious Case of Benjamin Button 공백 공백 (X)

 

 

 

코드 및 풀이방식

 

The Curious Case of Benjamin Button

단어-단어 사이 공백은 1개로 제한

앞 뒤 공백도 1개 밖에 안됌

 

1. 문자열의 length만큼 for문을 진행, string은 #include <string> 필요

2. The / Curious / Case / of / Benjamin / Button

띄어쓰기(/)가 5개면 단어가 6개

 

<핵심 원리>

단어의 수=띄어쓰기 수+1

단어의 개수인 num을 1로 지정해 두고

띄어쓰기가 발견될 때 마다 더 하면 단어의 개수가 된다.

 

<주의 사항>

앞, 뒤 공백을 고려해야 하는데 앞에 또는 뒤에 공백이 있으면 제거 해주면 된다.

 

 

 

<코드>

 

#include <iostream>
using namespace std;
#include <string>

 

int main(){

 

  string str;
  int num = 1;
  getline(cin, str);

  // cin.getline()은 공백 가능.cin은 불가능


  for (int i = 0; i < str.length(); i++){
    if (str[i] == ' ')

       { num++; }
  }

 

  if (str[0] == ' ')
  {
    num--;
  }
 

  if (str[str.length() - 1] == ' ')
  {
    num--;
  }
 

  cout << num << endl;


}

'알고리즘' 카테고리의 다른 글

13. 가장 많이 사용된 자릿수  (0) 2020.04.03
STL과 Vector&iterator  (0) 2018.09.02
[2440/2441] 별찍기 3-4  (0) 2018.05.11
[2438/2439] 별찍기 1-2  (0) 2018.05.11
[2839] 설탕 배달  (0) 2018.05.09
최근에 올라온 글
Total
Today
Yesterday