본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/문자열 (10)

[C++] 단어의 갯수 : 1152번

by 17번 일개미 2022. 7. 3.
728x90

문제

 

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


예제 입력

The Curious Case of Benjamin Button

예제 출력

6

 

주의할 점은 문자열의 맨 앞과 맨 뒤에는 공백 ' ' 이 올 수 있다!

 


풀이

 

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

int main()
{
	string s; // 문자열
	int count = 0; // 단어 갯수
	getline(cin, s); // 입력

	for (int i = 0; i < s.length(); i++) // 문자열 순회
	{
		if (s[i] == ' ') // 공백의 갯수 세기
		{
			count++;
		}
	}

	if (s[0] == ' ' && s[s.length() - 1] == ' ') // 앞 뒤 모두 공백
	{
		cout << count - 1;
	}
	else if (s[0] == ' ') // 앞만 공백
	{
		cout << count;
	}
	else if (s[s.length() - 1] == ' ') // 뒤만 공백
	{
		cout << count;
	}
	else // 앞 뒤 공백 없으면
	{
		cout << count + 1;
	}
}

 

로직

 

1. 문자열 입력받기 getline()을 통해 공백을 포함하여 입력받는다.

2. 문자열을 순회하면서 모든 공백의 갯수를 센다.

3. 마지막으로 앞,뒤가 공백인 경우,

앞만 공백인 경우,

뒤만 공백인 경우,

앞, 뒤 공백이 없는 경우를 나누어서

각 조건별로 count 변수를 조절하여 출력한다. (기본적으로 단어의 갯수는 공백의 갯수 + 1)

728x90