본문 바로가기

알고리즘 · 코딩

[백준 1152번] 단어의 개수

문제

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

입력

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

출력

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


C++ 풀이

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

int main() {
	int WordCount = 0;
	int start = 0, end;
	char c;
	vector <char> vc;
	while (true) {
		cin.get(c);
		if (c == '\n')
			break;
		else
			vc.push_back(c);
	}
	for (start = 0; start < vc.size(); start++) {
		if (vc[start] != ' ')
			break;
	}
	if (start == vc.size()) {
		cout << '0';
		return 0;
	}
	end = vc.size() - 1;
	while (vc[end] == ' ')
		end--;
	for (int i = start; i <= end; i++) {
		if (vc[i] == ' ')
			WordCount++;
	}
	cout << WordCount+1;
}

생각해야 할 예외 처리

앞 뒤 공백

공백으로만 이루어진 입력

 

처음에는 아예 문자를 입력 받지 않았을 경우도 예외처리를 하였지만 채점 시 따로 체크하지 않아서 제외했다.

 

 

문제 링크

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

 

반응형