본문 바로가기

백준/C++

[C++] 백준 1152번 - 단어의 개수

728x90

 

이분 탐색으로 푸는 문제는 최대나 최소를 구한 문제가 많이 나온다고 한다. 그래서 이분 탐색을 풀려고 했는데... 어려워서 문자열 문제부터 하고 넘어가야겠다는 생각이 들었다. 그래서 오늘의 문제는~~

 

 

문제 1152번

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

공백을 포함한 문자열을 받아야 하기 때문에 getline 함수를 사용해줘야 한다. getline(cin, 변수); 이런 식으로 사용하면 공백을 포함한 문자열을 입력받을 수 있다.

처음에는 단어를 세려고 했는데, 생각해보니까 공백은 연속해서 나오는 경우가 없으니까 공백을 세는 것이 나을 것 같다.

문자열은 공백으로 시작하거나 끝날 수도 있다고 쓰여있으니까 맨 앞과 맨 뒤를 뺀 나머지 부분만 반복문을 돌려 공백의 개수를 확인한다. 그리고 공백을 세는 것이기 때문에 count의 초기값은 1로 해준다(공백이 2개면 단어는 3개가 되기 때문에).

 

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

int main() {
	string s;
	getline(cin, s);
	int count = 1;
	if (s[0] == ' ' && s.length() == 1) {
		cout << 0;
		return 0;
	}

	for (int i = 1; i < s.length() - 1; i++) {
		if (s[i] == ' ') {
			count++;
		}
	}
	cout << count;

	return 0;
}

 

 

728x90