다디와 괴발개발

백준 1152 : 단어의 개수 (C++ 문자열 분리) 본문

알고리즘/C&C++

백준 1152 : 단어의 개수 (C++ 문자열 분리)

아임다디 2021. 10. 6. 16:53

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

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열

www.acmicpc.net

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

 

파이썬에서는 간단히 문자열을 split 함수를 이용하면 되지만 c++은 다소 복잡하다.공백을 제외한 단어를 추출해야하므로 sstream 헤더의 stringstream을 이용하여 문제를 해결하였다.

 

핵심 코드

string str;
getline(cin, str); //문장 입력 받기
    
stringstream ss(str);
string temp;
    
while (ss >> temp) { //temp의 자료형에 해당하는 문자열이 나오지 않을때까지 실행
	answer.push_back(temp);
}

 

전체 코드

#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	string str;
	getline(cin, str);

	vector<string> answer;
	stringstream ss(str);
	string temp;

	/*
	* stringstream은 문자열에서 필요한 자료형에 맞는 정보를 꺼낼 때 사용
	* 공백과 뉴라인을 제외하고 추출해내기 때문에 문제와 적합
	* sstream 전처리 헤더를 포함해야 한다
	* 
	* temp의 자료형이 string이기 때문에 string만 빼오는 것
	*/
	while (ss >> temp) {
		answer.push_back(temp);
	}

	cout << answer.size();

	return 0;
}

 

'알고리즘 > C&C++' 카테고리의 다른 글

[BOJ] 11403번 경로 찾기 - C++  (2) 2022.03.14
[BOJ] 2606번 바이러스 - C++  (0) 2022.03.13
C++로 Circular Queue (원형 큐) 구현하기  (0) 2021.08.18
C++로 스택 (Stack) 구현해보기  (0) 2021.08.17
백준 1546번: 평균  (0) 2021.08.12