별의 공부 블로그 🧑🏻‍💻
728x90
728x170

문제

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

 

입력

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

 

출력

첫째 줄에 단어의 개수를 출력한다.

 

예제 입력 1 

The Curious Case of Benjamin Button

 

예제 출력 1 

6

 

예제 입력 2 

 The first character is a blank

 

예제 출력 2 

6

 

예제 입력 3 

The last character is a blank

 

예제 출력 3 

6

 

출처

  • 문제를 만든 사람: author5
  • 데이터를 추가한 사람: clock, doju, jh05013
  • 빠진 조건을 찾은 사람: djm03178, his130
  • 내용을 추가한 사람: jh05013

 

알고리즘 분류

  • 구현
  • 문자열

 

문제 출처

https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

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

www.acmicpc.net

 


 

문제 해결 방법

  • 정답률 30%대의 문제이다.
  • 이 문제 해결 방법의 핵심 포인트는, 문자열 배열의 마지막에 공백(' ')을 넣어주는 것이었다.
    • sentence.push_back(' ');
  • 그 다음, 문자열의 길이 만큼 순회하면서 문자를 만날 경우 flag를 true로 설정한다. 그리고 공백을 만날 경우 flag가 true일 때 단어의 수(count)를 하나씩 증가시켜주는 방식으로 문제를 해결하였다.
    • 결국 공백을 기준으로 단어의 개수를 체크하는 원리이다.
    • 따라서 문자열의 마지막 공간에 문자가 있을 경우, 문자열 배열의 마지막에 공백을 따로 넣어주지 않는다면 마지막 문자는 카운팅되지 않게 된다.
      • 결국 문자열 배열의 마지막에 공백(' ')을 넣어주는 작업이 필요하다.

 

코드

#include <iostream>
#include <string>
using namespace std;

int main() {
    string sentence;
    
    getline(cin, sentence);
    sentence.push_back(' ');

    bool isWord, flag;
    int count;

    isWord = false;
    flag = false;
    count = 0;

    for (int i = 0; i < sentence.length(); i++) {  
        isWord = (sentence[i] != ' ');

        if (isWord) {
            flag = true;
        }
        else {
            if (flag) {
                count++;
            }
            flag = false;
        }
    }

    cout << count << endl;

    return 0;
}

 

채점 결과

728x90
그리드형(광고전용)

'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글

[BOJ2566][C++] 최댓값  (0) 2022.10.24
[BOJ2480][C++] 주사위 세개  (0) 2022.06.15
[BOJ2525][C++] 오븐 시계  (0) 2022.06.15
[BOJ2164][C++] 카드2  (0) 2021.10.30
[BOJ21964][C++] 선린인터넷고등학교 교가  (0) 2021.06.18
[BOJ5618][C++] 공약수  (0) 2021.04.13
[BOJ2455][C++] 지능형 기차  (0) 2021.02.08
[BOJ10757][C++] 큰 수 A + B  (0) 2021.02.05
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖