Deff_Dev

[백준] 1152번 단어의 개수 (C++) 본문

코딩테스트/백준

[백준] 1152번 단어의 개수 (C++)

Deff_a 2024. 2. 28. 15:50
 

1152번: 단어의 개수

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

www.acmicpc.net


문제

문제
출력

 

이 문제는 입력한 문자열에서 공백을 기준으로 단어의 갯수를 출력하는 문제이다.

여기서 주목해야될 점은 공백을 문자열에 넣어야 한다는 점이다.

cin으로 문자열 입력을 받는다면 공백은 입력되지 않기 때문에 getline을 사용하여 입력을 받아야한다.

 

2가지 방법으로 문제를 풀었다.

  1. for문을 이용해 공백을 찾아 단어 갯수를 세는 방법
  2. stringstream을 이용해 문자열을 탐색해 단어 갯수를 세는 방법

풀이 1

문자열 길이 만큼 반복문을 돌려 공백을 찾고 count를 +1 하는 방법으로 풀이했다.

#include <iostream>
#include<string>

// https://www.acmicpc.net/problem/1152 단어의 개수
using namespace std;

int main() {
	string str;
	char chr = ' ';
	int count = 1; // 문자 1개 이상은 무조건 입력되기 때문에 기본 단어의 갯수는 1로 설정

	getline(cin, str); // 문자열 입력

	if (str.length() == 1 && str[0] == ' ') { // 공백 하나만 입력할 수 있으므로 0출력
		cout << 0;
		return 0;
	}

	for (int i = 0; i < str.length(); i++) { // 문자열 길이 만큼 for문 반복
		 // 단어는 공백으로 구분하기 때문에 공백마다 Count++, 
       // 문자열 처음과 마지막에 공백이 나오는 경우도 있으니깐 조건으로 제외
		if (str[i] == ' ' && i > 0 && i < str.size() - 1) {
			count++;
		}
	}

	cout << count << "\n"; // 출력

	return 0;
}

 

풀이 2

stringstream을 이용해 문자열의 공백을 기준으로 문자열을 탐색하면서 count를 +1하는 방법을 풀이했다.

#include <iostream>
#include<string>
#include<sstream>
// https://www.acmicpc.net/problem/1152 단어의 개수
using namespace std;

int main() {
	string str, buf;
	int count = 0; // 문자 1개 이상은 무조건 입력되기 때문에 기본 단어의 갯수는 1로 설정

	getline(cin, str); // 문자열 입력

	stringstream ss(str); // stringstream 변수에 문자열 저장

 // 공백과\n 기준으로 문자열 탐색
	while (ss >> buf) { // 문자열 끝까지 탐색 완료시 반복문 break 
		count++;
	}

	cout << count << endl;

	return 0;
}

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 2178번 미로탐색 (C++)  (0) 2024.03.01
[백준] 9012번 괄호 (C++)  (0) 2024.03.01
[백준] 11399번 ATM (C++)  (0) 2024.03.01
[백준] 1697번 숨바꼭질 (C++)  (0) 2024.03.01
[백준] 1260번 DFS와 BFS (C++)  (0) 2024.02.29