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

Dandyoung·2023년 10월 24일
0

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

문제를 읽고 조금은 당황했을 수 있지만, 천천히 생각해보자. 문제가 주는 조건을 하나하나 적어보면,

  1. 공백을 포함한 문자열을 주겠다.
  2. 문자열에 연속된 공백은 없으며, 문자열 맨 앞과 맨 뒤에 공백이 있을 수 있다.

위의 2가지 조건을 유념하면서 코딩전에 생각을 해보자.

  1. 공백을 포함한 문자열을 주겠다.
    -> 그렇다면 cin 보다는 공백을 포함해서 입력받을 수 있는 getline을 쓰자.

  2. 문자열에 연속된 공백은 없으며, 문자열 맨 앞과 맨 뒤에 공백이 있을 수 있다.
    -> 맨 앞과 맨 뒤에 공백이 있는 경우, 조건문을 통해 count 횟수를 한번씩 빼주자.

내 생각에는 이 조건만 만족한다면, 엣지케이스가 존재하지 않을 것 같고 충분히 솔루션이 될 것 같다.

최종 솔루션

#include <iostream>
#include <string>

using namespace std;

int main(){
    string s;
    getline(cin, s);

    if(s.empty()){
        cout <<"0";
    }

    int cnt = 1;
    for(int i = 0; i < s.length(); i++){
        if(s[i] == ' '){
            cnt++;
        }
    }
    if(s[0] == ' '){
        cnt --;
    }
    if(s[s.length()-1] == ' '){
        cnt --;
    }
    cout << cnt;
    return 0;

}

조금 헷갈렸던 부분은, 공백이 1개 == 단어가 2개가 있다는 것을 의미한다는 것이다.
ex) "The Curious" 는 공백은 하나이지만 2개의 단어이다. 따라서, count 변수 선언 시 0이 아닌 1로 초기화하여 사용해야한다. (최종 출력 전에 +1 해주어도 된다.)

 int cnt = 1;
    for(int i = 0; i < s.length(); i++){
        if(s[i] == ' '){
            cnt++;
        }
    }

또한, 공백을 count 하는 조건문에서 ' '(작은따옴표) 대신 " "(큰 따옴표)를 사용하니 컴파일 에러가 발생하였다. 찾아보니, 큰 따옴표는 문자열 에 대한 단축 구문이며, 단일 문자를 비교하려면 작은따옴표를 사용해야 한다.

    for(int i = 0; i < s.length(); i++){
        if(s[i] == ' '){
            cnt++;
        }
    }

참고 : https://stackoverflow.com/questions/14544043/operand-types-are-incompatible-char-and-const-char

profile
코딩이어려운당신에게,,

0개의 댓글