-
[백준 알고리즘] 10951번: A+B - 4 (I/O) / hasNextInt() - JavaAlgorithm 2021. 8. 13. 00:33
https://www.acmicpc.net/problem/10951
[풀이]
- TMI: 이 문제는 처음에 후다닥 풀고 제출했다. 그리고 틀렸다...
로직은 맞는거 같았는데, 알고보니 종료시점 때문에 오답처리된 것이었다.
다른 블로거가 작성한 포스팅을 보니 입력의 종료는 EOF(추가로 읽을 수 있는 데이터 / End of File)가 없을 때 종료되어야한다고 기재되어 있다. 해당 문제를 풀이하면서 예제 입력에는 여러번의 테스트 케이스가 있는데 실제로 내가 먼저 제출한 코드에는 1회에 대한 것만 코딩되어 있어서 의아하긴 했다.
그렇지만 반복문을 쓰기에는 정해진 횟수나 조건이 없기에, 애매했다.
역시 문제를 풀다보면 내가 모르는 것을 정확히 알 수 있게되어 참 뿌듯(?)하다.
이 문제는 종료 조건을 따로 제시하지 않은 상태로 입력만 제시했고, 이는 추가로 읽어야하는 데이터가 없을 때 반복문을 종료하라는 것이다.
나는 Scanner를 통해 입력을 받도록 작성했고, Scanner는 추가로 읽어들여야하는 데이터가 없을 시 NotSuchElementException를 발생시킨다.
try-catch 로 처리할 수도 있다는데, 간단히 작성하기 위해서 hasNext()를 사용해서 해결했다.
*참고
next() : 공백 기준으로 문자열 입력 받음
nextLint() : 한 줄(개행문자 혹은 엔터) 기준으로 입력 받음
nextInt() : 공백 기준으로 Int값 읽어들임
hasNext() : 입력된 값이 정수일 경우 true 반환하고, 정수가 아니면 예외를 발생시키고 추가로 입력받지 았은 상태로 hasNextInt()에서 false 반환하여 반복문 종료 (반복문의 조건식이 boolean 타입을 리턴하면, for문 대신 while문 사용하는 것이 효율적)
-> hasNext()와 hasNextInt() 에 대해서는 추후 따로 포스팅해야겠다.
- nextInt()는 입력의 마지막 개행문자를 포함하기 때문에 nextInt() 사용 후 nextLint()을 사용 시 개행문자를 입력으로 처리하니 주의할 것 -> nextLine()을 추가하여 개행문자 입력받으면 해결
[정답코드]
//입력이 있으면 반복
while(scan.hasNextInt()) {
}
==========================================================================
[오답코드]
'Algorithm' 카테고리의 다른 글
[백준 알고리즘] 11718번 그대로 출력하기 (I/O) - Java (0) 2021.08.17 [백준 알고리즘] 10953번: A+B - 6 (I/O) - Python (0) 2021.08.17 [백준 알고리즘] 2558번: A+B - 2 (I/O) - Java (0) 2021.08.12 [백준 알고리즘] 2739번: 별찍기 -2 (Java: for문) - 미완성 (0) 2021.07.22 [백준 알고리즘] 11022번: A+B - 8 (Java: for문) (0) 2021.07.18