728x90
728x170
문제
영어 대소문자와 띄어쓰기만으로 이루어진 문장이 주어진다. 이 문장에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 단어는 띄어쓰기 하나로 구분된다고 생각한다.
입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문장이 주어진다. 이 문장의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력
The Curious Case of Benjamin Button |
예제 출력
6 |
힌트
출처
· 문제를 만든 사람: author5
알고리즘 분류
· 문자열 처리
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
#include <iostream>
#include <string.h> // strlen()
#define N 1000000
using namespace std;
int main()
{
char sen[N];
int len = 0, flag = 0;
cin.getline(sen, N); // 공백을 포함한 문장의 입력 받기.
len = strlen(sen);
if (sen[0] != ' ') flag++; // 처음 부분에 공백이 없을 경우
for (int i = 1; i < len; i++) {
if ((sen[i] != ' ') && (sen[i - 1] == ' ')) flag++; // '_(단어)'인 경우
}
cout << flag << endl;
return 0;
} |
cs |
간단해 보이지만, 생각보다 어려웠던 문제. (정답률이 20% 정도인 것을 보면 알 수 있다.)
핵심은 처음 부분에 공백이 없을 경우, 그리고 '공백+단어'인 경우가 있을 경우 단어의 수를 나타내는 변수를 하나씩 증가시켜주면 된다.
728x90
그리드형(광고전용)
'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글
[BOJ11654][C++] 아스키 코드 (0) | 2017.10.25 |
---|---|
[BOJ10039][C++] 평균 점수 (0) | 2017.10.25 |
[BOJ2920][C++] 음계 (0) | 2017.10.25 |
[BOJ2577][C++] 숫자의 개수 : 정수를 문자로 바꾸기 (0) | 2017.10.21 |
[BOJ13752][C++] 히스토그램 (0) | 2017.10.20 |
[BOJ1110][C++] 더하기 사이클 (0) | 2017.09.27 |
[BOJ11721][C++] 열 개씩 끊어 출력하기 (0) | 2017.09.24 |
[BOJ11720][C++] 숫자의 합 : 문자를 정수로 바꾸기 (0) | 2017.09.22 |