문제
https://www.acmicpc.net/problem/1152
소스
#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를 적절하게 잘 이용한 코드이다.
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][백준 2908][문자열 처리] 상수 :: seoftware (0) | 2020.02.16 |
---|---|
[C++][백준 1157][문자열 처리] 단어 공부 :: seoftware (0) | 2020.02.16 |
[C++][백준 10809][문자열 처리] 알파벳 찾기 :: seoftware (0) | 2020.02.16 |
[C++][백준 11654][문자열 처리] 아스키 코드 :: seoftware (0) | 2020.02.16 |
[C++][프로그래머스] 타겟넘버 - 깊이/너비 우선 탐색(DFS/BFS) :: seoftware (0) | 2020.02.11 |
댓글