| 문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
| 입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
| 출력
첫째 줄에 단어의 개수를 출력한다.
| 예제 입력 1
The Curious Case of Benjamin Button
| 예제 출력 1
6
| 예제 입력 2
Mazatneunde Wae Teullyeoyo
| 예제 출력 2
3
| 문제의 키 포인트
1. 첫째줄에 문자열이 주어지며, 대소문자를 구분하지 않는다.
2. 문자열의 길이는 1,000,000을 초과하지 않으며, 띄어쓰기로 구분된다.
3. 이 때 단어는 띄어쓰기 한 개로 구분되며, 연속되는 띄어쓰기는 없다.
4. 출력으로는 단어의 개수가 출력된다.
| 소스코드(SourceCode)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char input[1000001]; // '\n'넣어줄 공간까지
int space = 0;
int word = 0;
int len;
int i; // 반복 변수
// 문자열 입력부
gets(input, 1000001);
len = strlen(input);
// 띄어쓰기 개수 세기
for (i = 0; i < len; i++)
{
if (input[i] == ' ')
{
space++;
}
}
// 앞뒤 공백과 연속 공백이 없을 경우
// 단어 개수 = 공백 + 1
word = space + 1;
// 예외 처리 공백으로만 이루어져 있을 경우
if (len == space)
{
word = 0;
printf("%d", word);
}
else
{
if (isspace(input[0]))
{
word--;
}
if (isspace(input[len - 1]))
{
word--;
}
printf("%d", word);
}
}
| 문제 출처
https://www.acmicpc.net/problem/1152
반응형
'코딩 | 알고리즘 & 문제풀이 > 백준_Backjoon' 카테고리의 다른 글
[C언어] Backjoon_Code 5622, 다이얼 (0) | 2021.07.11 |
---|---|
[C언어] Backjoon_Code 2908, 상수 (0) | 2021.07.10 |
[C언어] Backjoon_Code 1157, 단어 공부 (0) | 2021.07.08 |
[C언어] Backjoon_Code 2675, 문자열 반복 (0) | 2021.07.07 |
[C언어] Backjoon_Code 10809, 알파벳 찾기 (0) | 2021.07.06 |