Date:

1) 문제 링크

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

2) 접근

처음에는 공백 개수를 세려고 했는데, 문자열 앞뒤에도 공백이 있을 수 있다는 걸 깨닫고 예외 처리가 너무 지저분해서 걍 단어를 직접 잘라 저장하는 방식으로 짰다.

3) 풀이

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

int main(void){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

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

    istringstream inp_string(s);
    string string_buffer;

    while(getline(inp_string, string_buffer, ' ')) { if(string_buffer != "") ++cnt; }
    cout << cnt;

    return 0;
}

4) 피드백

내가 푼 방식은 쉽게 쉽게 짜는 방식일지 모르나 불필요하게 시간, 공간을 잡아먹는 면이 크다. string_buffer 같은 변수를 쓴다든지, getline 같은 함수까지 쓴다든지… 좀 더 나은 해법을 찾아봤다.

앞에 공백, 뒤에 문자가 오는 횟수를 count

32104032번 코드는 위의 발상을 바탕으로 구현한 코드이다. 이건 비단 이 문제상황 뿐만 아니라 공백의 연속이 존재할 때 등 보다 일반적인 상황에서도 비교적 깔끔하게 적용할 수 있다. 또한 낭비되는 시간, 공간을 확연히 줄일 수 있다.(C++11)

Leave a comment