문제 풀이

[백준] 1152번: 단어의 개수 - JAVA (자바)

auyeol 2023. 6. 28. 09:23
728x90

 

문제

 

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

입력                                    	출력
 The first character is a blank			6

The last character is a blank			6

 

공백으로 이루어진 문자열이 주어졌을 때, 문자열의 단어의 개수를 구하는 문제이다.

 

 

 

trim()을 한뒤, split()을 사용해서 풀면 바로 풀릴 것 같았지만 풀리지 않았다... 결국 다른 사람이 푼 걸 찾아봤다.

 

  " "(공백)을 입력한 경우에 0이 아닌 1의 값이 나온다. 따라서 " "(공백)을 입력한 경우에 0의 값이 나오게 설정을 해주어야 한다.

 

split()을 사용하는 것 이외에도 String을 Scanner로 입력받는 쪽에서도 문제가 있었는데,

String을 입력받을 땐 next()로만 하면 되는 줄 알았는데 끝 쪽에서 공백을 포함해서 입력하는 경우도 있었기에 nextLine()으로 받았어야 했다.

 

 

[차이점]

  nextLine()은 Enter를 치기 전까지 쓴 문자열을 모두 리턴
  next()는 공백 전까지 입력받은 문자열을 리턴 

 

 

------------------------------------------------------------------------------------------------------------------

 

 

풀이

StringTokenizer를 이용한다. StringTokenizer는 공백을 기준으로 나뉘어 토큰에 저장하기 때문에 입력한 문자열의 처음이나 마지막에 공백이 있어도 동일한 결과를 출력할 수 있다.

 

(1) Scanner 사용 

 

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();
		
		sc.close();
		
		StringTokenizer st = new StringTokenizer(str," ");
		System.out.println(st.countTokens());
		
	}
}

 

------------------------------------------------------------------------------------------------------------------

 

 

(2) BufferdReader 사용 

 

 

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

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		
		System.out.println(st.countTokens());
				
	}

}

 

 

 

------------------------------------------------------------------------------------------------------------------

 

위의 내용을 참고해서 trim()을 사용한뒤, 공백을 입력한 경우 0이 나오게 설정하여 풀었다.

 

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String str = sc.nextLine();
		sc.close();
		
		str = str.trim();
		String[] str_arr = str.split(" ");
		
		if(str_arr[0].equals("")) System.out.println(0);
		else System.out.println(str_arr.length);
	
		
		
	}
}
728x90