문제
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를 적절하게 잘 이용한 코드이다.
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[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 |
댓글