ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • EOF의 이해
    백준 2023. 7. 31. 11:53
    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
Designed by Tistory.