코딩 | 알고리즘 & 문제풀이/백준_Backjoon

[C언어] Backjoon_Code 1152, 단어의 개수

PatienceLee 2021. 7. 9. 08:54

| 문제

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

 

| 입력

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 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

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한

www.acmicpc.net

 

반응형