ALGORITHM/백준

[JAVA] 백준 1152 - 단어의 개수

송경훈 2024. 3. 23. 11:28
반응형

문제

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

 

입력

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

 

출력

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

 

입출력 예제

 

알고리즘❓ 풀어내기❗️

단어의 개수를 세기가 어렵다면, 공백의 개수를 이용해 보자.

 

🧑🏻‍💻코드 리뷰 - (1)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int count = 0;

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

        if (str.charAt(0) != ' ' && str.charAt(str.length() - 1) != ' ') {
            count += 1;
        } else if (str.charAt(0) == ' ' && str.charAt(str.length() - 1) == ' ') {
            count -= 1;
        }
        System.out.println(count);
    }
}

for 문 : str을 순회하면서 인덱스의 요소가 공백인 것을 찾아 count의 개수를 더한다.
if ~ else if 문 : str의 첫 번째와 마지막 요소가 공백이 아니라면 count에 1을 더한다. 반대로 공백이라면 count에 1을 뺀다.
 

🧑🏻‍💻코드 리뷰 - (2)

import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        
        StringTokenizer st = new StringTokenizer(str, " ");
        System.out.println(st.countTokens());
    }
}

StringTokenizer 클래스는 문자열을 우리가 지정한 구분자로 쪼개주는 클래스이다. 그렇게 쪼개어진 문자열을 토큰(token)이라고 부른다.
StringTokenizer st = new StringTokenizer(str, " ") : str을 공백을 기준으로 분리해 준다.
System.out.println(st.countTokens()) : int countTokens() 메서드는 남아있는 token의 개수를 반환한다. 전체 token의 개수가 아닌 현재 남아있는 token 개수이다. 그러므로 공백을 기준으로 분리하고 남은 token의 개수(=단어의 개수)가 출력된다.