ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1152번 단어의 개수
    알고리즘 문제풀이/Java 2020. 4. 5. 20:03

     

     

    문제

     

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

    입력

    첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

    출력

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

    예제 입력 1 복사

    The Curious Case of Benjamin Button

    예제 출력 1 복사

    6

    예제 입력 2 복사

    Mazatneunde Wae Teullyeoyo

    예제 출력 2 복사

    3

    예제 입력 3 복사

    Teullinika Teullyeotzi

    예제 출력 3 복사

    2


    해설

    처음 문제를 접했을 때, 문제가 엄청 쉬운데 왜 정답률이 26퍼일까 의문이 들었었다. 사실 엄청 어려운 문제는 아니다.(bronze 3으로 측정되었으니...) 

    근데 지엽적이라 해야할까 개념이 미숙하면 틀리기 쉬운 문제인 건 맞다.

     

    다음은 문제의 코드이다.

    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line = br.readLine();
            line = line.trim();
            String[] result = line.split(" ");
            System.out.println(result[0].equals("") ? 0 : result.length);
        }
    }

    상당히 간단하다. 문제의 풀이에서 가장 중요한 건 공백의 처리방식이다. trim 메서드를 통해 문자열의 맨 앞과 끝의 공백을 제거해 주었고, 이후에 split(" ")을 통해 공백 단위로 문자열을 쪼갰는데, 여기서 처음에 틀렸었다.

     

    만약 문자열이 공백(" ")이라면, 이를 split 메서드를 거치면 result에는 무엇이 저장될까? 

    더보기

    답은 ""이다.

    중요한 건 split이라는 메서드는 구분자를 통해서 분할을 한다는 것이다. 구분자를 제거하고 나면 ""이 존재한다는 걸 잊지말자.

    느낀 점

    • split 메서드를 사용할 때, 공백을 분할하면 어떻게 되는 지는 생각해 본 적이 없었는데, 이건 꼭 기억해둬야 할 것 같다.

     

     

    '알고리즘 문제풀이 > Java' 카테고리의 다른 글

    알고스팟 Boggle  (0) 2020.04.06
    백준 1010번 다리 놓기  (0) 2020.04.06
    백준 1233번 주사위  (0) 2020.04.05
    백준 1076번 저항  (0) 2020.04.05
    [프로그래머스 Level 1] 문자열 내 마음대로 정렬하기  (0) 2020.04.03

    댓글

Designed by Tistory.