Algorithm/문제풀이
[C++] 백준 알고리즘 1152 단어의 개수
사과당근
2022. 10. 12. 03:37
https://www.acmicpc.net/problem/1152
아주 단순한 문제.
공백을 포함한 문자열을 받고, 맨처음이 공백인 경우와 맨끝이 공백인 경우를 제외하고 공백 갯수 +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;
}