데블 아니고 데블리

운동,햄버거, 개발 좋아요

🐷💻📝

알고리즘

[백준_1152] 단어의 개수

데블아니고데블리 2024. 3. 28. 16:13

[문제] 

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

 

[입력]

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

 

[출력]

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

 

[입력 예시 /  출력예시]

The Curious Case of Benjamin Button / 6
The first character is a blank / 6
The last character is a blank / 6
Devely is so smart / 4

 

마지막 예시는 그냥 넣어봤다..ㅎㅎ 문제의 요점은 공백을 기준으로 단어뭉치가 몇개니? 를 물어보는게 의도인 듯 싶다.

1. BufferedReader()를 통해 문자열을 입력받는다.

2. 문제에서 "또한 문자열은 공백으로 시작하거나 끝날 수 있다." 라는 조건이 있어 trim(); 함수를 통해 양쪽 공백을 제거해준다.

3. 공백이 아니라면 String배열(strArray) 공간을 만든다.

4. split()함수를 사용하여 입력받은 문자열(Devely is so smart)를 (" ")공백 기준으로 나눠 아까 만든 strArray에 저장한다.

(그러면 베열에는 "Devely", "is", "so" "smart" 원소들로 저장된다)

5. 배열의 개수를 출력해버리면! 답이군

6. 빈 문자열이면 걍 0 출력해버렷!


손에 익은 쉬운코드라도 한 줄씩 분석하는 습관을 가지려고 한다.  정답코드, 주석 꼼곰하게 달아놓았다

package src.com.company.day2;

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

public class BJ_1152_단어의개수 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 주어진 문자열(예시 : The Curious Case of Benjamin Button)을 저장할 공간
        String sentence = br.readLine();
        //" The Curious Case of Benjamin Button " 이런 예시가 있을 수 있으니까 앞 뒤 공백 제거하고
        sentence =  sentence.trim();

        // 공백 제거했을 때 문자열 있으면
        if(!(sentence.isEmpty())) {
            //공백을 기준으로 나눠보시게..
            String[] strArray = sentence.split(" ");
            // 디버그 걸어보면 여기 출력값이 "The" "Curious" "Case" "of" "Benjamin" "Button"
            System.out.println(strArray.length);
        }
        // 빈문자열이면
        else {
            System.out.println(0);
        }
    }
}

'알고리즘' 카테고리의 다른 글

[백준_2293] 동전 1  (0) 2024.04.16
[백준_8911] 거북이  (0) 2024.04.11
[기타] 자바로 조합 구현하기(with 공주 옷입히기)  (0) 2024.04.11
[백준_27160] 할리갈리  (0) 2024.03.28