관리 메뉴

한다 공부

[C++] 백준 알고리즘 1152 단어의 개수 본문

Algorithm/문제풀이

[C++] 백준 알고리즘 1152 단어의 개수

사과당근 2022. 10. 12. 03:37

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

아주 단순한 문제.

 

공백을 포함한 문자열을 받고, 맨처음이 공백인 경우와 맨끝이 공백인 경우를 제외하고 공백 갯수 +1을 하면 된다.

cin>> 으로 받으면 공백을 인식하지 못하기 때문에 getline(cin, str) 을 사용하면 된다.

#include <iostream>
using namespace std;
int main(){
    int ans=0;
    string s;
    getline(cin,s);
    for(int i=0; i<s.length(); i++){
        if(i!=0 && i!=s.length()-1 && s[i]==' '){
            ans++;
        }
    }
    cout<<ans+1;
}

그래서 코드를 위와 같이 짰었다. 그런데 오류가 났다.

왜일까 계속 고민을 했는데 공백이 연속으로 나올 수는 없지만, 공백이 하나만 있는 문자열은 입력될 수도 있다.

즉 " " 을 예외처리 해줘야한다.

 

문제에 "영어 대소문자와 공백으로 이루어진 문자열이 주어진다."

라고 되어있어서 당연히 한개 이상의 영문자를 포함하는줄..!

 

수정한 코드는 다음과 같다.

#include <iostream>
using namespace std;
int main(){
    int ans=0;
    string s;
    getline(cin,s);
    for(int i=0; i<s.length(); i++){
        if(i!=0 && i!=s.length()-1 && s[i]==' '){
            ans++;
        }
    }
    if(s==" ") ans--; //예외처리
    cout<<ans+1;
}