[백준] 1152번 단어의 개수 C++ 문제 풀이 문자열

2019. 10. 4. 13:03알고리즘/백준

728x90
반응형

문제

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

입력

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

출력

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


예제 입력 1

The Curious Case of Benjamin Button


예제 출력 1

6


예제 입력 2

Mazatneunde Wae Teullyeoyo


예제 출력 2

3


예제 입력 3

Teullinika Teullyeotzi


예제 출력 3

2


문제 풀이

#include<stdio.h>
#include<stdbool.h>

int main() {
	char charArr[1000002];
	bool isWord = false;
	int i = 0, count = 0;
	fgets(charArr, sizeof(charArr), stdin);
	while(1){
		if (charArr[i] == '\n')
			break;
		if (!isWord && charArr[i] != ' '){
			isWord = !isWord;
			count++;
		}
		if (isWord && charArr[i] == ' ')
			isWord = !isWord;
		i++;
	}
	printf("%d", count);
	return 0;
}

입력이 끝나면 종료를 해야 하니  \n을 만나면 반복문을 종료하도록 하였습니다.

 

charArr[i]가 공백이 아니면 단어이므로 false인 isWord를 true로 바꿔주고 단어를 만났으니 count 값을 증가시킵니다.

이렇게 하면 다음에 문자가 연속되더라도 isWord가 true이므로 조건문을 타지 않아 count 값을 증가시키지 않습니다.

 

charArr[i]가 공백이면 입력 첫 부분에 공백이거나 단어와 단어 사이의 공백입니다.

입력 첫 부분의 공백이더라도 isWord가 false이기 때문에 조건이 거짓으로 됩니다. 

 

 

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

728x90
반응형