나 개발자 진짜 되냐?

백준 C++ 1152번 단어의 개수 ( getline, stringstream ) 본문

C++을 시작해봐요!/구현문제를 풀어봤어요!

백준 C++ 1152번 단어의 개수 ( getline, stringstream )

Snow Rabbit 2025. 12. 8. 19:36

 

맨날 알고리즘 알고리즘 노래만 부르다가...

어느날 내가 풀었던 문제를 못푸는 불상사를 맞이하며..

현타가 와서 새롭게 공부하기로 마음먹었다.

 

백준에 구현문제만 모아둔 곳에 가서

일단 이 문제를 읽고 어떻게 풀면 좋을까? 를 구상하는 시간을 가지며..

그런 시간이 필요할거같아서 새로운 문제들을 풀어보기로 했다.

 

일단 맛만 보고.. 또 그 뒤에 생각해보기로 하자...

 

문제범위는 브2부터 실4이다.

그 이유는.. 모른다 그냥 거기서부터 하란다.


 

공백...제외

처음에 내 생각은 cin으로 받고

단어 하나 하나 받아서 공백이아니면 더할 생각이었는데

생각보다 잘 안됐다.

 

고민하다가 결국...

ㅋㅋㅋ답을 지피티에게 물어보았다.

 

지피티는 두가지 문법? 에 대해 설명해 주었다.


 

1. getline

한 줄 전체를 문자열로 읽어오는 함수

 

공백까지 포함해서 한 줄 자체를 문자열로 가져오는 함수이다.

cin이 아니라 이친구를 통해서 문자열을 가져와야한다.

 

stirng s;

getline(cin, s) 이렇게 쓴다.

cin으로 받아서 s에 넣는다 뜻으로 해석할 수 있겠다.

 

 

2. stringstream

한줄의 문자열을 다시 끊어주는 함수

 

stringstream ss(문자열);

이라고 쓰며

우리는 문자열이 s로 했으니..

stringstream ss (s)가 되겠다.

 

즉 우리는 s로 나눈걸 ss를 통해 공백 단위로 잘라서 하나씩 꺼내게 된다.

 

그래서!

ss > word로 공백기준으로 단어를 하나씩 빼게 된다.

그리고 빼고 그만큼 카운트 해주면 된다.

 

ss가 그냥 cin역할이라고 생각하면 될 거 같다.

 

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int cnt = 0;
    string s;
    getline(cin, s);

    stringstream ss(s);

    string word;
    while (ss >> word)
    {
        cnt++;
    }
    cout << cnt << "\n";
}

 

 

새로운 문법을 두개나 배웠다. 정말 어렵네...

 

사실 getline으로 받아서 bool.값으로

푸는것도 되는거같다.

 

만약에 공백이면..

불값을 끄고, 

불값이 꺼진상태에서 새로운 글씨가 들어오면 다시 키고 카운트 해준다.

 

 

이렇게도 풀 수 있다.


늘 생각하지만 백준은 참 불친절하다.

흥.....

그리고?? ss 이자식 너무 어렵다. 어려워!!!!!!!!!

봐도봐도 모르겠는걸~~~~~~