-
[c++/bj 1152] 단어의 개수 : getline, cin 풀이Programming 기초/Coding Test 2024. 7. 2. 08:44
공백으로 구분되는 영어 단어의 나열인 문자열이 주어진다. 문자열은 공백으로 시작하거나 끝날 수 있다.
#include<iostream> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int cnt = 0; string str; getline(cin, str); int pre = ' '; for (int i: str) { if (pre == ' ' && i != ' ') { cnt += 1; } pre = i; } cout << cnt << endl; }
cin은 공백을 기준으로 끊어서 버퍼로부터 읽어오는데, 그 기능을 이용해서 단어를 세고 싶었다. 하지만 어떻게 구현해야할지 잘 몰랐다. 그래서, 문장을 한 번에 읽어온 후에 한 자씩 for문으로 돌리고, 이전 문자와 비교해서 공백에서 문자로 바뀌면 카운트하는 방식으로 구현했다.
다른 블로그를 찾다가 처음 생각했던 방법을 구현한 코드를 첨부한다. (참고 블로그)
while문으로 구현한 방식은 버퍼에서 계속 읽어오기 때문에 getline으로 구현한 것에 비해 속도가 2배 정도 더 느렸다. 생산성으로 따지면 아래 코드가 나은 거 같은데, 속도면으로 따지면 getline 방식이 나음을 알고 있는 게 좋을 듯 싶다.
int cnt=0; string s; while(cin>>s) { cnt++; } cout<<cnt;
파이썬으로 구현하면 strip 메소드로 처음과 끝의 공백을 없애고 중간의 빈칸을 세서 +1 하는 방법으로 풀이할 수 있다.
s = input().strip() print(s.count(" ") + 1 if s else 0)
파이썬으로 공부했던 코테를 c++로 다시 준비하면서, 파이썬이 매우매우매우 편했다는 걸 느낀다.
'Programming 기초 > Coding Test' 카테고리의 다른 글
[bj 3052] c++ 풀이 및 bits/stdc++.h (0) 2024.07.19 [bj 10809] c++ 풀이 -> 문자열 동적할당 직접 구현하기 (1) 2024.07.12 [softeer] 함께하는 효도 - 파이썬 (0) 2024.06.28 [softeer] 나머지 정리 활용 (0) 2024.06.26 [softeer] 진정한 효도 - python (0) 2024.06.26