[BOJ 1152] 단어의 개수
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