이번 문제는 영어 문자열이 입력되면 사용된 단어의 개수를 찾는 문제였습니다. 특이점은 모든 단어는 띄어쓰기를 기준으로 쓰여지고 문장의 맨 앞과 끝에 띄어쓰기가 올 수 있었습니다.
import java.util.Scanner;
public class Word_Num {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String word = sc.nextLine(); //문자열 입력 받기
String[] word_arr = word.split(" "); //공백을 기준으로 나눠서 배열에 저장
if (word_arr.length == 0) { //만약 아무것도 입력하지 않았다면 배열의 크기가 0이므로 배열[0] 이런식으로 접근하면 에러가 뜨므로 아예 0을 프린트 해주고 프로그램을 종료합니다.
System.out.println(0);
System.exit(0); //프로그램 강제 종료
}
if (word_arr[0] == "") { //배열의 맨 앞이 공백이면 공백은 단어가 아니므로 길이 -1
System.out.println(word_arr.length - 1);
} else { //그 외에는 정상적으로 길이 출력
System.out.println(word_arr.length);
}
}
}
abc
문제 자체는 푸는데 오래 안걸렸는데 배열범위 초과 오류가 떴었습니다. 아마 그냥 스페이스바 한 번 누르고 입력할 경우 오류가 발생했던거 같습니다. 아무것도 입력하지 않고 엔터를 누르면 초기값이 들어가서인지 0으로 잘 나왔는데 스페이스바만 누르면 제대로 split메서드가 안됐습니다. 이 부분을 잡아주기 위해서
if (word_arr.length == 0) {
System.out.println(0);
System.exit(0); //프로그램 강제 종료
}
이 코드를 넣어서 입력받은 문자의 배열의 길이가 0이라면 0을 출력해줬습니다. ->> 나중에 확인해 보니 아무것도 입력 안하고 엔터를 누르면 split이 정상 작동해서 크기 1인(인덱스는 빈 공간) 배열을 만드는데 스페이스바만 입력하면 split을 못하는걸 확인 했습니다.
그리고 두번째 if문에서는 " "가 아닌 ""를 사용해서 빈 공간을 확인했는데 아마 문장 처음에 띄어쓰기를 하면 배열[0]은 빈 공간인데 split은 스페이스를 기준으로 값을 넣습니다. 그렇기에 스페이스바를 넣은게 아닌 아무것도 없는 값을 넣은게 아닐까 싶습니다. 저희 눈엔 안보이는 값을 컴퓨터가 넣은거 같습니다.
그리고 여기서 처음에는 배열의 맨 마지막에도 빈 공간이 존재할 수 있는 가능성을 생각했는데 split 메서드는 맨 마지막 빈 공간은 인식을 못하는지 애초에 반응을 안하기에 따로 조건식을 주지 않았습니다.(처음에 줬다가 궁금해서 해보니 인식 안하길래 뺐습니다.)
이번 문제는 어렵진 않았는데 의외로 정답률이 20프로대여서 놀랬습니다. 아마 저랑 비슷하게 스페이스바만 입력 되어서 배열 범위 오류가 많이 나와서 그런거 같습니다. split에 대해 좀 더 자세히 알게 되었고 trim 메서드도 배웠습니다!!
출처 : 백준 1152번 https://www.acmicpc.net/problem/1152