문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
1. 대소문자의 공백으로 이루어진 문자열 입력. (대소문자가 상관이 없다는 의미.)
2. 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다(중복을 신경 쓰지 않아도 된다는 의미)
3. 단어는 공백 한 개로 구분된다. (공백을 기준으로 문자열이 나올 때마다 체크한다.)
4. 첫째 줄에 단어의 개수를 출력한다. (한 줄로 된 문자열을 입력받는다.)
BuffredReader/Writer가 익숙해져야 하기 때문에 가능한 사용 하려고 노력하는 편이다.
먼저 String sentence를 사용하여 문자열을 입력받았다. 이때. trim()을 사용하였는데
. trim()은 앞, 뒤의 공백을 제거해주는 역할을 한다. (앞에 공백이 있을 경우 배열에 공백이 들어가진다.)
String형태의 배열 count를 sentence를 공백으로 나눈 개수만큼의 길이를 만들고
count에 sentence.split을 사용하여 바로 대입한다.
int num을 선언하여 count의 길이만큼을 대입해준다.
여기까지만 작성하고 출력해도 어지간한 단어들의 개수를 잘 출력하는데
여기서 나의 문제가 발생한다.
공백을 입력했을 경우에 num = 1이 된다는 것을 인식하지 못했다.
다행히 나와 같이 해당 부분을 생각하지 않은 사람들이 꽤 있어 반례를 구할 수 있었고
처음 if(count[0].equals(""))을 사용하여 공백을 없애려고 했다.
이 때도 문제가 생겼는데
나는 공백을 체크해야 한다고 생각해서 " " 큰따옴표 안에 공백을 입력했는데
오히려 띄어쓰기를 하는 경우 인식을 하지 못하게 된다.
그냥 해당 명령어가 통과가 된다고 생각하면 된다.
""띄어쓰기를 없앤 채로 해당 명령어를 진행했을 경우
num=0;으로
두 번째 방법으로는 isEmpty()가 있었다.
해당 변수가 비었는지 확인하여 boolean형태로 반환하는데
if문제 사용하여 true로 반환하면
해당 변수가 비어있다는 말이 되고, num을 0으로 대입시켜 문제점을 해결하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Number_1152 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sentence = br.readLine().trim();
String[] count = new String[sentence.split(" ").length];
count = sentence.split(" ");
int num = count.length;
// if(count[0].equals("")) {
// num = 0;
// }
if(count[0].isEmpty()) {
num=0;
}
System.out.println(num);
br.close();
}
}
// 공백이 입력되었을 때도 숫자가 체크되므로
// 공백을 예외처리를 해주어야한다.
// equal(""), .isEmpty() 두 가지 방법이 있다.
// equal(" ") 공백이라고 굳이 띄어쓰기 할 필요가 없다. 인식을 못한다.
// isEmpty()는 해당 변수가 비어있는지 체크하는 boolean형 메소
|
cs |
주말에는 더 간단하게 코드를 작성한 사람들을 보고 배우는 시간을 가져야겠다.
'Basic > 코딩테스트' 카테고리의 다른 글
Comparable과 Comparator (0) | 2022.05.13 |
---|---|
[브론즈3] 백준 10817번 자바(JAVA) - 세 수 (0) | 2022.05.10 |
[브론즈3] 백준 2440번 자바(JAVA) - 별 찍기 - 3 (0) | 2022.05.10 |
[브론즈2] 백준 2577번 자바(JAVA) - 숫자의 개수 (0) | 2022.04.20 |
[브론즈2] 백준 3052번 자바(JAVA) - 나머지 (0) | 2022.04.20 |