반응형


 

백준 - 단계별로 풀어보기 [1152] 단어의 개수

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

 

 

문제

 

 

 

영어 대소문자와 띄어쓰기로 이루어진 문자열을 입력받고, 문자열 안에 들어있는 단어의 수를 구하는 프로그램을 짜는 문제이다. 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

단어는 띄어쓰기로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

 

풀이

 

문제의 조건에서 볼 수 있듯이, 공백을 포함한 문자열을 받아야하기 때문에, cin 함수보다는 getline 함수를 활용하여 문자열을 입력받아야한다.

 

#include <string>
...
string str;
getline(cin, str);

 

string을 받아오는 getline함수는 string 헤더파일에 들어있으며, 위의 경우 getline함수를 통해 표준 입력 cin을 str에 저장하라는 의미이다.

이를 통해 공백을 포함한 문자열을 입력 받을 수 있다.

 

따라서, 입력받은 문자열을 탐색하면서 공백이 있을 경우 단어의 카운팅을 늘려주면 된다.

단, 문자열에 연속된 공백은 없고, 문자열 앞과 뒤에는 공백이 있을 수 있다고 문제에 제시되어있으므로, 문자열의 맨 앞과 맨 뒤가 공백일 경우엔 새로운 단어가 아니므로 카운트를 1씩 줄여주면 해결되는 문제이다.

 

코드

 

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str;
    getline(cin,str);
    int count = 0;
    bool space = false;
    if(str.empty())
    {
        cout << "0";
        return 0;
    }
    count = 1;
    for(int i = 0; i < str.length(); i++)
    {
        if(str[i] == ' ')
            count++;
    }
    if(str[0] == ' ')
        count--;
    if(str[str.length()-1] == ' ')
        count--;

    cout << count;
    return 0;
}

 

평가

 

공백을 포함한 문자열을 받는 방법에 익숙하지 않은 사람이 많아 정답률 25.565%라는 낮은 수치가 나오지 않았을까싶다.

C++에서 공백을 포함한 문자열을 받는 방법에 대해서 배울 수 있는 문제여서 포스팅을 진행하였다.

이번 문제에서는 getline함수의 사용법을 익히는 것에 중점을 두는 것이 좋을 듯 하다.

 

 

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,