알고리즘/백준(BAEKJOON)

[1152 자바] 단어의 개수/백준

jojelly 2021. 9. 24. 18:05
반응형

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

문자열을 공백을 기준으로 나눠서 단어의 개수를 구하는 문제이다.

" "로 나눠서 구하면되는 쉬운문제로 보이지만 주의해야할점은 예제2 처럼 문자열 맨 처음 공백을 넣을경우 제외하고 구해야한다.

 

[풀이방법]

Scanner로 값을 받아 line에 문자열을 저장한 후 StringTokenizer를 통해 " " 로 line을 나눠준 후 countTokens()를 사용하면 값을 구할 수 있다.

 

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

public class String1152 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();

        StringTokenizer st = new StringTokenizer(line," ");
        System.out.println(st.countTokens());


/*        String[] word = sc.nextLine().split(" ");
        int cnt = 0;
        if (word[0] .equals("")){//String배열 생성 시 주소값이 부여된다.
            // 그렇기에 String타입을 선언했을때는 같은 값을 부여하더라도 서로간의 주소값이 다를 수있어 equals를 사용해야함.
            cnt = word.length-1;
        }else if (word.length==0){
            cnt = 0;
        }else {
            cnt = word.length;
        }
        System.out.print(cnt);
*/

    }
    }

 

[풀이방법2]

주석처리한 부분을 살펴보자 문자열 배열을 통해 " "로 split()를 해서 문제를  풀었는데 답을 구할 수 있었지만,
split을 사용하면 백준에서 런타임에러가 발생했다. 

내가 풀은방법은 해당배열 word[0]가 공백일 경우 배열의 길이 -1을 해주고 문자열이 아예없을경우 0으로 그 외의 경우는 배열의 길이는 나타내도록 풀이하였다.  

반응형