백준의 1152번 문제 단어의 개수이다.
https://www.acmicpc.net/problem/1152
1152번: 단어의 개수
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열
www.acmicpc.net
< 문제 >
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
< 예제 >

사실 매우 간단해보이는 문제이다.
나도 처음에 그냥 IF문에 str[i] == ' ' 쓰면 되는거 아닌가 하고 작성했다가 틀렸었다..ㅋㅋ
먼저 cin에 너무 익숙해져 문제를 틀린 것 같다.
내가 처음에 작성했던 코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin >> str;
int count = 1;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ' ') {
count++;
}
}
if (str[0] == ' ')
count--;
if (str[str.length() - 1] == ' ')
count--;
cout << count;
}
이렇게 되고 예제의 The Curious Case of Benjamin Button을 입력하면 str에는 'The'만 입력되게 된다.
그렇기 때문에 띄어쓰기를 포함한 문자열 전체를 받아와야 하기 때문에 getline을 사용하면 된다.
getline에 대해 설명하자면 getline은 입력된 문자열을 엔터를 칠 때 까지 받아오는 함수이다.
getline을 적용한 코드는 아래와 같다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
getline(cin, str);
int count = 1;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ' ') {
count++;
}
}
if (str[0] == ' ')
count--;
if (str[str.length() - 1] == ' ')
count--;
cout << count;
}
이렇게 코드를 작성하면 제대로 작성된다.
getline에 대해서는 따로 작성할 예정이라 c++ 카테고리에 작성해 두었다.
[C++] 띄어쓰기를 포함한 문자열 저장 getline()
우리는 문자열을 받아올때 대부분 cin을 사용한다. string str; cin >> str; 이런식으로 문자열을 받아오곤 한다. 그렇다면 공백을 포함한 문자열은 어떻게 받아올까? getline()을 사용하면 공백을 포함한
loasd.tistory.com
'백준 > 단계별' 카테고리의 다른 글
| [C++] 백준 5622 (0) | 2022.12.17 |
|---|---|
| [C++] 백준 2908 (0) | 2022.12.17 |
| [C++] 백준 1157 (0) | 2022.12.10 |
| [C++] 백준 2675 (0) | 2022.12.10 |
| [C++] 백준 10809 (1) | 2022.12.10 |