백준 1152 - 단어의 개수 (Silver V)
영어 대소문자와 공백으로 이루어진 문자열에서 단어의 개수를 구한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 백준 1152 - 단어의 개수 (Silver V)
// https://www.acmicpc.net/problem/1152
// 문제 설명
// 영어 대소문자와 공백으로 이루어진 문자열에서 단어의 개수를 구한다.
// 단어는 공백 한 개로 구분되며, 문자열은 공백으로 시작하거나 끝날 수 있다.
// 입력
// 첫 줄: 영어 대소문자와 공백으로 이루어진 문자열 (길이 ≤ 1,000,000)
// 출력
// 첫째 줄에 단어의 개수 출력
// 입출력 예
// 입력: 출력:
// The Curious Case of Benjamin Button 6
// The first character is a blank 6
// The last character is a blank 6
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int answer = 0;
string word;
while (cin >> word)
answer++;
cout << answer << "\n";
return 0;
}
문자열이 공백으로 시작하거나 끝날 수 있다는 조건이 이 문제의 함정이다. getline으로 읽으면 앞뒤 공백을 직접 처리해야 하지만, cin >> word는 공백과 개행을 자동으로 건너뛰며 단어 단위로 읽기 때문에 엣지 케이스가 저절로 해결된다. while (cin >> word)는 EOF(입력 끝)에서 자동으로 false가 되어 종료 조건도 따로 필요 없다. 같은 날 푼 세 문제를 관통한 함정은 빈 컨테이너를 건드리면 안 되는 이유에 정리했다.
핵심 요약 — 단어 세기의 진짜 난이도는 앞뒤 공백 처리다.
cin >>의 공백 자동 skip과 EOF 자동 종료를 쓰면 트리밍 코드 없이 카운터 하나로 끝난다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.