문제
https://www.acmicpc.net/problem/1152
문장에서 단어의 개수를 세는 문제였다.
문제 풀이
1. StringTokenizer
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer token=new StringTokenizer(br.readLine()," ");
System.out.print(token.countTokens());
}
}
2. split
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String[] words = input.trim().split(" ");
System.out.print(words.length);
}
br.close();
}
}
split을 사용하면 계속 답이 틀리는 이유는 공백을 입력했을 때, 결과가 1이 나오기 때문이다(┬┬﹏┬┬) 이는 split의 동작 방식 때문인데, 과정은 다음과 같다.
- " "를 trim()하면 ""가 된다.
- split(" ")를 호출하면, 빈 문자열을 기준으로 분리할 수 있는 단어가 없으므로, 결과는 [""](하나의 빈 문자열)이다.
- 따라서 words.length는 1이 된다.
이와 같은 동작을 방지하기 위해, 입력이 공백만 있는 경우를 체크해야 한다. 아래는 이 문제를 해결한 코드이다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
//입력이 null이거나 공백만 있는 경우
if (input == null || input.trim().isEmpty()) {
System.out.print(0);
} else {
String[] words = input.trim().split("\\s+"); //여러 개의 공백을 나눔
System.out.print(words.length);
}
reader.close();
}
}
이 코드에서는 input.trim().isEmpty()를 사용하여 입력이 공백만 있는 경우를 체크하고, 이 경우 0을 출력하도록 했다. 이렇게 하면 " "와 같은 입력에 대해 0이 출력되도록 할 수 있다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/JAVA]5622번 다이얼 (0) | 2025.01.17 |
---|---|
[백준/JAVA]2908번 상수 (0) | 2025.01.17 |
[백준/JAVA]2675번 문자열 반복 (0) | 2025.01.16 |
[백준/JAVA]10809번 알파벳 찾기 (0) | 2025.01.16 |
[백준/JAVA]11720번 숫자의 합 (0) | 2025.01.16 |