본문 바로가기
개인 공부/코딩테스트

[C++][백준 1152] [문자열 처리] 단어의 개수 :: seoftware

by seowit 2020. 2. 16.

 문제 

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

 소스 

#include <iostream>
#include <string>

using namespace std;

int main(void) {
	string s;
	getline(cin, s);

	int cnt = 0; bool flag = true;
	for (int i = 0; i < s.length(); i++) {
		if (s[i] == ' ') {
			flag = true;
		}
		else if (flag) {
			flag = false;
			cnt++;
		}

	}
	cout << cnt;
	return 0;
}

1. getline(cin, s) : 처음에 그냥 cin >> s 이렇게 문자열을 받았는데, 띄어쓰기 포함된 문자열을 받을 때는 getline 사용해야 한다.

2. flag의 역할 : 공백이 나오면 flag를 true로 한다. 그러다가 공백이 아니고(=단어가 시작되고) flag가 true인 상태(=이전까지는 공백었던 상태)가 되면 flag를 false로 바꾸고 단어의 개수를 1만큼 증가 시킨다. 다음 공백 전까지는 flag 가 false인 상태이므로 단어의 개수가 세어지지 않는다. if와 else if를 적절하게 잘 이용한 코드이다. 

댓글