728x90
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
예제 입력
The Curious Case of Benjamin Button
예제 출력
6
주의할 점은 문자열의 맨 앞과 맨 뒤에는 공백 ' ' 이 올 수 있다!
풀이
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s; // 문자열
int count = 0; // 단어 갯수
getline(cin, s); // 입력
for (int i = 0; i < s.length(); i++) // 문자열 순회
{
if (s[i] == ' ') // 공백의 갯수 세기
{
count++;
}
}
if (s[0] == ' ' && s[s.length() - 1] == ' ') // 앞 뒤 모두 공백
{
cout << count - 1;
}
else if (s[0] == ' ') // 앞만 공백
{
cout << count;
}
else if (s[s.length() - 1] == ' ') // 뒤만 공백
{
cout << count;
}
else // 앞 뒤 공백 없으면
{
cout << count + 1;
}
}
로직
1. 문자열 입력받기 getline()을 통해 공백을 포함하여 입력받는다.
2. 문자열을 순회하면서 모든 공백의 갯수를 센다.
3. 마지막으로 앞,뒤가 공백인 경우,
앞만 공백인 경우,
뒤만 공백인 경우,
앞, 뒤 공백이 없는 경우를 나누어서
각 조건별로 count 변수를 조절하여 출력한다. (기본적으로 단어의 갯수는 공백의 갯수 + 1)
728x90
'백준 알고리즘 단계별 풀이 (문제 수) > 문자열 (10)' 카테고리의 다른 글
[C++] 다이얼 : 5622번 (0) | 2022.07.03 |
---|---|
[C++] 상수(세자리 수 뒤집어서 크기비교) : 2908번 (0) | 2022.07.03 |
[C++] 단어 공부(가장 많은 알파벳 찾기) : 1157번 (0) | 2022.07.02 |
[C++] 문자열 반복 / 단어 재조합하기 : 2675번 (0) | 2022.06.28 |
[C++] 알파벳 찾기 : 10809번 (0) | 2022.06.26 |