cyphen156

백준-문자열 1152 단어의 개수 본문

컴퓨터공학/알고리듬 풀이

백준-문자열 1152 단어의 개수

cyphen156 2024. 9. 25. 10:55

1152번: 단어의 개수 (acmicpc.net)

 

공백을 포함한 문자열을 입력받아 몇개의 단어가 존재하는지 구한다.

한번에 한 단어씩 입력받아 개수를 세거나(C)

한번에 모두 입력 받아 문자열 파싱을 통해 처리하거나(C++)

C언어 문자열 입력 함수는 다양하게 존재한다. 

  • 문자 하나를 입력받는 getchar()
  • 공백을 포함, 개행문자 입력 전까지 입력받는 fgets()
  • 형식문자열을 입력받는 scanf / scanf_s()

지정한 문자 입력 전까지 모든 문자를 입력받을 수 있는 scanf("%[^지정 문자]")

-> 여러 줄로 이루어진 입력도 처리할 수 있음!

제약사항

  • 0 < Sentence <= 1,000,000

주의 사항

scanf는 '\0', '\t', '\n'입력 전까지 문자열을 입력 받는다.

첫 입력으로 공백이 오는경우를 처리해야 한다.

C 풀이

단어의 개수_1152.c

문자 하나씩 입력받아 처리한다. 첫 문자 공백을 제거하기 위해 이전 입력문자 하나를 추적한다.

/**
* 백준 문자열 1152 단어의 개수
* 공백을 포함한 문자열을 입력받아 몇개의 단어가 존재하는지 구한다.
* 한번에 한 단어씩 입력받아 개수를 세거나(C)
* 한번에 모두 입력 받아 문자열 파싱을 통해 처리하거나(C++)
* 
* 
* 제한사항
*****************************************
* 0 < Sentence <= 1,000,000             *
*****************************************
*
*
*
* 주의
* scanf는 '\0', '\t', '\n'입력 전까지 문자열을 입력 받는다.
* 첫 입력으로 공백이 오는경우를 처리해야 한다.
* 
* 풀이시간 10분
*/

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
    int cnt = 0;
    char ch, oldch = ' ';

    while((ch = getchar()) != '\n')
    {
        if (oldch == ' ' && (ch != ' ' && ch != '\t'))
        {
            cnt++;
        }
        oldch = ch;
    }
    printf("%d\n", cnt);
    return 0;
}

C++ 풀이

단어의 개수_1152.cpp

문자열 파싱법

/**
* 백준 문자열 1152 단어의 개수
* 공백을 포함한 문자열을 입력받아 몇개의 단어가 존재하는지 구한다.
* 한번에 한 단어씩 입력받아 개수를 세거나(C)
* 한번에 모두 입력 받아 문자열 파싱을 통해 처리하거나(C++)
* 
* 
* 제한사항
*****************************************
* 0 < Sentence <= 1,000,000             *
*****************************************
*
*
*
* 주의
* scanf는 '\0', '\t', '\n'입력 전까지 문자열을 입력 받는다.
* 첫 입력으로 공백이 오는경우를 처리해야 한다.
* 
* 풀이시간 10분
*/

#include <iostream>
#include <string>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
    
    int cnt = 0;
    string str;
    getline(cin, str);

    for (int i = 0; i < str.length(); ++i)
    {
        if ((i == 0 || str[i-1] == ' ') && str[i] != ' ')
        {
            ++cnt;
        }
    }

    cout << cnt << '\n';
    return 0;
}

 

모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리 에 있습니다.

Workspace/알고리듬 풀이 at main · cyphen156/Workspace · GitHub

 

Workspace/알고리듬 풀이 at main · cyphen156/Workspace

Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.

github.com