발생한 문제
BOJ에서 Java로 알고리즘 문제를 푸는데, 다음과 같은 형식으로 입력을 받는 문제가 있었다.
2
OOXXOXXOOO
OXOXOXOXOXOXOX 케이스가 몇 개인지 입력 받고, 그 뒤에는 String을 입력 받는 것인데 여기서 문제가 발생했다.
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
String[] ox = new String[num];
for (int i = 0; i < num; i++) {
ox[i] = scan.nextLine();
}
위와 같은 상황에서 ox[0]에는 첫 번째 입력한 String이 들어가지 않고, ox[1]에 들어가버린 것이다.
원인을 살펴보니 숫자 입력 단계에서 발생한 개행 문자가 ox[0]에 들어가고 String 입력은 ox[1]에 들어가기 시작한 것이었다.
해결 방법
검색 결과 여러가지 해결 방법이 있었지만.. 제일 간단하게 해결할 수 있는 방법은 scan.nextLine을 중간에 하나 넣어서 개행 문자를 미리 읽어버리도록 하는 것이었다.
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
String[] ox = new String[num];
scan.nextLine();
for (int i = 0; i < num; i++) {
ox[i] = scan.nextLine();
}
이렇게 구현해서 해결!
알고리즘 문제 풀다보면 가끔씩 이런 일이 발생하니 잘 기억해둬야겠다.