본문 바로가기

BAEKJOON/문자열

백준 1152번 [단어의 개수](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 1152 [단어의 개수]


문제 링크: https://www.acmicpc.net/problem/1152

문제 설명:

영어 대소문자와 공백으로 이루어진 문자열이 주어질 때, 문자열에 포함된 단어의 개수를 출력하는 프로그램을 작성하세요. 단어는 공백으로 구분됩니다.

입력 조건:

  • 첫째 줄에 문자열이 주어집니다. 문자열의 길이는 1 ≤ 길이 ≤ 1,000,000입니다.
  • 문자열은 공백으로 시작하거나 끝날 수 있습니다.

출력 조건:

  • 문자열에 포함되어 있는 단어의 개수를 출력합니다.

문제 해결 코드


#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    getline(cin, s); // 공백 포함 입력받기

    int cnt = 0; // 단어 개수
    for (int i = 0; i < s.size(); i++) {
        if (s[i] != ' ' && (i == 0 || s[i - 1] == ' ')) {
            // 단어의 시작 조건: 현재 문자가 공백이 아니고, 이전 문자가 공백이거나 문자열의 첫 문자일 때
            cnt++;
        }
    }

    cout << cnt << endl; // 단어 개수 출력
    return 0; // 프로그램 정상 종료
}

코드 설명

위 코드는 문자열에서 단어의 개수를 계산하고 출력합니다.

  • 입력 처리:
    • `getline`을 사용하여 공백이 포함된 문자열을 입력받습니다.
  • 단어 개수 계산:
    • 현재 문자가 공백이 아니고, 이전 문자가 공백인 경우 단어의 시작으로 간주합니다.
    • 문자열의 첫 문자가 공백이 아닐 때도 단어로 처리합니다.
  • 출력: 단어의 개수를 출력합니다.

시간 복잡도 분석:

  • 문자열을 한 번 순회하며 단어의 개수를 계산하므로 시간 복잡도는 O(N)입니다.

결과

다음은 입력 예시와 출력 결과입니다:

입력:
The Curious Case of Benjamin Button

출력:
6
입력:
 Hello World 

출력:
2

입력된 문자열의 단어 개수를 공백을 기준으로 정확히 계산합니다.

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST