-
728x90
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
각 테스트 케이스마다 A+B를 출력한다.
예제 입력 1
1 1 2 3 3 4 9 8 5 2
예제 출력 1
2 5 7 17 7
풀이
이 문제의 핵심은 EOF를 감지하고 반복문을 탈출 하는 것 이었다..
여기서 EOF(End of File)는 파일 또는 입력 소스에서 더 이상 읽을 데이터가 없음을 나타내는 신호이다.
해당 코드에서는
if (input == null|| input.*isBlank*())이 부분을 통해 EOF를 감지하고 무한루프를 탈출 하도록 설계하였다.
입력이 없이 엔터키만 입력해 빈 줄이 있는 경우 **NumberFormatException**이 발생하는 오류가 있었는데, val (A, B) = input.split(" ").map { it.toIntOrNull() ?:0} 이 코드에서 입력이 없거나 빈 줄일 경우를 고려하여 숫자 변환을 수행하여 오류를 잡았습니다.
fun main() { val emptyArray : Array<Int> = Array(100){0} var i =0 while(true) { val input = readLine() if (input == null|| input.isBlank()) { break } val (A, B) = input.split(" ").map { it.toIntOrNull() ?:0} emptyArray[i] = A + B i++ } for(j:Int in 0 until i) { println(emptyArray[j]) } }
toIntOrNull() 함수는 문자열을 정수로 변환하려고 시도하고, 변환이 실패할 경우에는 **null**을 반환합니다. 그래서 입력이 없는 경우, 즉 빈 문자열이나 공백 문자열을 입력하면 **split(" ")**를 통해 빈 리스트가 생성되고, **map { it.toIntOrNull() ?: 0 }**에서 모든 요소는 **null**로 변환됩니다.
즉 입력이 없는 경우에는 빈 리스트가 생성되고 모든 요소가 **null**로 변환되며, input.*isBlank*() 조건문이 참이 되어 무한 루프를 탈출하게 됩니다.
'백준' 카테고리의 다른 글
나이순 정렬 (0) 2023.07.31 2751번 수 정렬하기 (0) 2023.07.31 소수 1312번 (좋은 문제..) (0) 2023.07.31 빠른 입출력 (0) 2023.07.31 A+B 한줄에 입력 (0) 2023.07.31