문제
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);
}
}
'문제 풀이' 카테고리의 다른 글
[백준] 11718번: 그대로 출력하기 - JAVA (자바) (0) | 2023.08.06 |
---|---|
[백준] 2908번: 상수 - JAVA (자바) (0) | 2023.06.29 |
[백준] 2675번: 문자와 문자열 - JAVA (자바) (0) | 2023.06.27 |
[백준] 10809번: 알파벳 찾기 - JAVA (자바) (0) | 2023.06.26 |
[백준] 11720번: 숫자의 합 - JAVA (자바) (0) | 2023.06.25 |