(구) solved ac class 문제들/class 1

[class 1]백준 단어의 개수(1152번) 풀이 (C++/Python)

isekaipudding 2026. 4. 21. 11:20

문제 : 단어의 개수(1152번)(Bronze II)

문제 링크 : https://www.acmicpc.net/problem/1152
출처 : Baekjoon Online Judge

 

이 문제는 사실 C++에서 getline() 혹은 while(cin >> s) 형식으로 하면 좀 더 쉽게 풀립니다.

여기서는 while(cin >> s) 방식을 채택해서 더 쉽게 풀 수 있습니다.

#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s;
    int result = 0;

    while(cin >> s) result++;

    cout << result;

    return 0;
}

C++에서는 공백이 얼마나 있든 공백이 아닌 연속적인 문자열을 읽어내고 EOF 상태가 되면 자동으로 끝나게 됩니다.

그러니 바로 단어의 개수를 구할 수 있습니다.

 

문제는 Python입니다.

Python은 문자열 통째로 입력받는 편이며 단어와 단어 사이의 공백이 여러 개 있으면 파싱으로도 한계가 있습니다.

그러므로 여기서는 순차 탐색(sequential search)로 단어의 개수를 파악해야 합니다.

우선 " a  bb c "라는 문자열이 주어진다고 가정합니다.

이 때 초기 상태(status)는 True로 가정하고 초기 결과값 result는 0이라고 가정합니다.

지금부터 제가 의식의 흐름대로 작성한 표들을 잘 봐주세요.

               
  a     b b   c  

index 0입니다.

여기서는 빈칸이고 상태가 True이므로 아무런 변화가 없습니다.

               
  a     b b   c  

index 1입니다.

여기서 단어를 만났습니다.

이 때 단어의 시작점에 도달했으므로 result에 +1이 되고 status = False가 됩니다.

왜 status를 넣었는지는 나중에 index 5에서 알려드립니다.

               
  a     b b   c  

index 2입니다.

단어가 끝나서 공백을 만났습니다.

공백을 만났고 status가 False이므로 status는 다시 True가 됩니다.

               
  a     b b   c  

index 3입니다.

공백이고 status가 True이므로 아무런 변화가 없습니다.

               
  a     b b   c  

index 4입니다.

단어의 시작점을 만났고 status가 True이므로 result에 +1이 되고 status는 False가 됩니다.

               
  a     b b   c  

index 5입니다.

여기가 제일 중요합니다.

공백이 아닌 문자를 만났으나 status가 False이므로 result에 +1이 되지 않고 그대로 유지합니다.

쉽게 말해 아무런 변화가 없습니다. 단어가 아직 안 끝났기 때문이죠.

 

그 뒤 index 6에서 status가 True로 변환되고 index 7에서 result +1이 되고 같은 방식으로 적용하여 최종적으로 result = 3이라는 결과를 얻게 됩니다.

 

잘 관찰해보면 변화가 일어난 경우는 딱 2가지입니다.

- 공백이 아니고 status가 True인 경우 -> result +1이 되고 status는 False가 된다.

- 공백이고 status가 False인 경우 -> status는 True가 된다.

 

이것을 Python으로 구현하면 다음과 같습니다.

import sys

input = sys.stdin.readline

S:str = input().rstrip()

result:int = 0
status:bool = True

for ch in S :
    if ch != " " and status :
        result += 1
        status = False
    if ch == " " and not status :
        status = True
        
print(result)