[백준 1152번] 단어의 개수

2022. 4. 15. 03:05코딩 테스트(JAVA)/백준

문제

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

입력

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

출력

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

예제 입력 1 복사

The Curious Case of Benjamin Button

예제 출력 1 복사

6

예제 입력 2 복사

 The first character is a blank

예제 출력 2 복사

6

예제 입력 3 복사

The last character is a blank 

예제 출력 3 복사

6

 

문제 분석

1. 입력

2. 띄어쓰기 기준으로 배열에 넣고 배열의 길이 반환

 

처음에는 문제가 너무 간단하다고 생각해서 제출했는데, 틀렸습니다. 라고 해서 당황했다

그때의 코드는

import java.util.*;
public class WordCount {

	public static void main(String[] args) {
		// 입력
		Scanner kb = new Scanner(System.in);
		String str = kb.nextLine();
		String[] arr = str.split(" ");
		System.out.println(arr.length);	
	}

}

// 예제 2번
 The first character is a blank
7

 

예제입력2를 보니 맨 앞이 공백으로 시작했는데 그 부분은 count를 하면 안되는 것이었다.

 

런타임에러 ArrayIndexOutOfBounds

package step;

import java.util.*;
public class WordCount {

	public static void main(String[] args) {
		// 입력
		Scanner kb = new Scanner(System.in);
		// Enter를 치기 전까지 쓴 문자열을 모두 리턴
		String str = kb.nextLine();
		String[] arr = str.split(" ");
		//System.out.println(Arrays.toString(arr));
		if(arr[0] == "") {
			System.out.println(arr.length-1);
		}else System.out.println(arr.length);
		
		
	}

}

 

다른 버전

package step;

import java.util.*;
public class WordCount {

	public static void main(String[] args) {
		// 입력
		Scanner kb = new Scanner(System.in);
		String S = kb.nextLine().trim(); 
		System.out.println(S.split(" ").length);

		
		
	}

}
nextLine()메소드는 Enter를 치기 전까지 쓴 문자열을 모두 리턴한다는 것이고 next() 메소드는 스페이스 즉 공백 전까지 입력받은 문자열을 리턴한다는 것이다.

 

문자열의 앞과 뒤에 있는 공백 제거

trim()

 

성공 코드

package step;

import java.util.*;
public class WordCount {

	public static void main(String[] args) {
		// 입력
		Scanner kb = new Scanner(System.in);
		// nextLine() : Enter를 치기 전까지 쓴 문자열을 모두 리턴
		// trim() : 문자열의 앞과 뒤에 있는 공백 제거
		String str = kb.nextLine().trim(); 
        // !space, enter만 쳐도 1 출력됨, 입력 안 했을 시 0으로 처리!
		if(str.isEmpty()) {
			System.out.println(0);
		}else System.out.println(str.split(" ").length);

	}

}

'코딩 테스트(JAVA) > 백준' 카테고리의 다른 글

[백준 14916] 거스름돈  (0) 2022.04.16
[백준 5622번] 다이얼  (0) 2022.04.16
[백준 1157번] 단어 공부  (0) 2022.04.15
[백준 10809번] 알파벳 찾기  (0) 2022.04.14
[백준 1541번] 잃어버린 괄호  (0) 2022.04.14