[백준/BOJ] 1152번_단어의 개수 (C++/Java)

JIMIN·2023년 1월 31일

BOJ_Bronze

목록 보기
33/75

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

문제


영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.


입력


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


출력


첫째 줄에 단어의 개수를 출력한다.



💻 예제 입력

The Curious Case of Benjamin Button
 The first character is a blank
The last character is a blank 

💻 예제 출력

6
6
6

풀이


문자열을 공백을 포함하여 getline으로 받아온 후, 반복문으로 공백을 만나는 순간마다 단어 개수를 카운트함.

첫번째 단어는 미리 카운트해놓고 그 이후 단어 개수를 카운트한 후 첫 문자와 마지막 문자가 공백인 경우를 차감.


C++ 소스코드


#include <iostream>
using namespace std;

int main(void) {
    string str;
    getline(cin, str);
    
    int count = 1;
    for (int i = 0; i < str.length(); i++)
        if (str[i] == ' ') count++;
    
    // 첫 문자가 공백일 때
    if (str[0] == ' ') count--;
    
    // 마지막 문자가 공백일 때
    if (str[str.length()-1] == ' ') count--;
    
    cout << count << "\n";
}

Java 소스코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();

        int count = 1;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ') count++;
        }

        // 첫 문자가 공백일 때
        if (str.charAt(0) == ' ') count--;

        // 마지막 문자가 공백일 때
        if (str.charAt(str.length()-1) == ' ') count--;

        System.out.println(count);
    }
}
profile
잘못된 코드나 정보가 있다면 알려주세요! 👋🏻

0개의 댓글