본문 바로가기
CS/JAVA

next와 nextLine의 차이 (feat. 백준 10953번)

백준 10953번 문제

 

백준 알고리즘 입력 문제를 풀다가 또 막혔다. 정확히는 푸는 방법은 알겠는데, 코딩하고 돌리니까 런타임 에러가 나서 당황했다. 

 

일단 해답 코드는 처음 n을 입력받고 for문을 n번 돌리면서 split함수를 사용해 아랫줄을 문자열 배열에 split함수를 사용해 ","를 기준으로 숫자만 입력한 다음, 이를 정수형으로 변환해 더한 값을 그때그때 출력해주는 식으로 짜면 됐다. 내가 겪은 문제는 그 문자열을 입력받을 때 next를 사용해야 할 걸 nextLine을 사용해서 생겼다. 

 

내가 처음 작성했던 코드는 이랬다

 

런타임 에러가 나버린 코드

 

여기서 왜 에러가 나나 디버그 창을 열어서 봤더니, 입력값을 받았을 때 

 

5

3,2

1,2

 

라면 5를 입력하고 n값에 5가 들어간 뒤 줄을 바꾸려고 엔터를 칠 때 num에 개행문자인 \n까지 들어가버려서 이를 Integer.parseInt를 통해 정수로 변환하는 과정이 에러가 나버린 거다. num[0]에 \n이 들어가버렸는데 개행문자는 정수로 변환할 수 없으니까... 그래서 해결책을 찾아보니 next클래스를 사용하면 된다고 했다. next는 최초 공백이 나올 때까지 입력값을 받기 때문에 쉼표와 숫자 사이에 공백이 없는 10953번의 경우 사용해도 상관이 없었다. 

 

그래서 다시 제출한 코드는 아래와 같다.

 

nextLine만 next로 고쳐줬더니 성공했다!

 

next함수는 개행문자는 공백으로 취급해서 넘기고 숫자가 나오는 부분부터 인식하기 때문에 배열에 숫자만 제대로 들어갔다. 아직도 입력에 대해 모르는 게 이렇게나 많다니. 스스로에게 충격이었고 정말.. 힘내야겠다. 

'CS > JAVA' 카테고리의 다른 글

Java Scanner 클래스의 hasNext 함수란? (feat. 백준 10951번)  (1) 2020.07.09