궤도

[백준] 1152번 : 단어의 개수 본문

💻 현생/⛓ 알고리즘

[백준] 1152번 : 단어의 개수

영이오 2020. 10. 13. 17:58

문제

 


풀이

 

이 문제의 핵심은 두 가지 있다. 하나는 띄어쓰기를 포함해 입력을 받는 것이고, 다른 하나는 다양한 입력 경우의 수를 고려해 단어의 수를 세는 것이다.

 

getline 함수를 이용하면 띄어쓰기를 포함해서 입력을 받을 수 있다. 다만 입력을 저장하는 변수의 자료형에 따라 사용법이 다르다.

string str;
getline(cin, str, '\n');

char c[1000];
cin.getline(c, 1000, '\n');

마지막 인자로 들어간 '\n'는 생략할 수 있다. default 값으로 '\n'이 들어가고, 사용자가 원하는 값을 임의로 넣을 수도 있다. 'a'를 넣을 수도 있고, ' '를 넣을 수도 있다.

 

입력을 받았으니 단어의 수를 셀 차례이다. 공백이 연속으로 나오는 경우는 없다고 하니 공백의 등장 횟수를 적절하게 세서 단어의 수를 세면 될 것 같은데 입력 조건을 보면 여기에도 세가지 경우가 있다.

 

1. 공백으로 시작해서 공백으로 끝남.

2. 공백으로 시작하거나, 공백으로 끝남.

3. 문자로 시작해서 문자로 끝남.

 

1번의 경우 단어의 수보다 공백의 수가 1개 더 많을 것이다. 2번의 경우 단어의 수와 공백의 수가 같을 것이며, 3번의 경우라면 단어의 수가 공백의 수보다 1개 더 많을 것이다. 이를 고려해서 코드를 짜면 된다.


소스코드

 

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

int main() {
	int count, length, i;
	char word[1000000];

	cin.getline(word, 1000000, '\n'); //공백 포함해서 입력받기
	length = strlen(word);
	if (word[0] == ' ' && word[length - 1] == ' ') //공백으로 시작해서 공백으로 끝남
		count = -1;
	else if (word[0] == ' ' || word[length - 1] == ' ') //공백으로 시작하거나 공백으로 끝남
		count = 0;
	else //문자로 시작해서 문자로 끝남
		count = 1;
	for (i=0; i < length; i++) {
		if (word[i] == ' ')
			count++;
	}
	cout << count << endl;
}
Comments