티스토리 뷰

 

문제 풀러가기✍🏻

 


서론

EOF가 무엇인지 공부한 후에, 문제 풀이를 시작했다.

문제

입력이 끝날 때까지 A+B를 출력하는 문제. EOF에 대해 알아 보세요.

 

더보기

EOF

  •  End of File의 약자. 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타내는 용어
  • 알고리즘 문제를 풀 때, 입력값을 얼마나 받을지 명시하지 않을 경우에 사용
  • 입력처리를 Scanner로 할 경우와 BufferedReader로 할 경우 EOF 사용 방법이 다르다.

Scanner

  • hasNext메서드를 사용하여 EOF를 한다.
Scanner sc = new Scanner(System.in);

while(sc.hasNext()) {
     System.out.println(sc.nextInt());
}

BufferedReader

  • 특정 내정 함수가 존재하지 않음
  • br.readLine메서드로 입력값을 계속 읽되, 읽은 값이 null이변 반복문을 종료하는 방식으로 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";

while((input = br.readLine()) != null) { /* 이후 로직 전개 */ }

참고

링크 : https://steady-coding.tistory.com/227

 

시행착오(Trial&Error)

51175029 - 컴파일 에러

Main.java:9: error: incompatible types: int cannot be converted to String
            a = Integer.parseInt(sc.nextInt());
                                           ^
Main.java:10: error: incompatible types: int cannot be converted to String
            b = Integer.parseInt(sc.nextInt());
                                           ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
2 errors
error: incompatible types: int cannot be converted to String

sc.nextInt() 호출을 하면, 문자열 형식의 입력을 숫자로 변환한다. 여기에 다시 Integer.parseInt()로 동일한 변환을 한 번더 했기 때문에 에러가 발생했다.

51175043 - 맞았습니다!!

Scanner를 이용한 문제 풀이는 빠르게 성공했다. 이후 시행착오는 BufferedReader 사용 풀이 과정에서 발생했다.

51175710 - 컴파일 에러

Main.java:18: error: <identifier> expected
        } catch(IOException) {}
                           ^
1 error

try-catch문을 이용한 예외 '처리' 과정에서 catch문을 IOException을 이용해서 처리해야 하는데, 참조변수를 사용하지 않아서 에러가 발생했다.

51175725, 51175778, 51175890 - 런타임 에러(NullPointer)

while문의 조건식 작성을 잘못해서 NullPointerException이 발생했다.

51175772 - 컴파일 에러

Main.java:15: error: variable st is already defined in method main(String[])
                StringTokenizer st = new StringTokenizer(br.readLine()," ");
                                ^
1 error

변수 st를 이미 선언한 상황에서 중복 선언을 시도했기 때문에 에러가 발생했다.

51175885 - 컴파일 에러

Main.java:9: error: ';' expected
            StringTokenizer st = new StringTokenizer(br.readLine()," ")
                                                                       ^
1 error

 ;를 빼먹어서 컴파일 에러가 발생했다.

풀이(Solution)

BufferedReader와 Scanner로 입력 처리하는 방법이 있는데, 각각 EOF 방법을 사용할 줄 알아야 풀 수 있는 문제이다. Scanner 입력 처리 시, hasNext()를 호출하는 방법을 사용한다. 반면, BufferedReader 입력 처리 시, 특정 내정 함수가 존재하지 않기 때문에, br.readLine메서드로 입력값을 계속 읽되, 읽은 값이 null이변 반복문을 종료하는 방식으로 처리해야 한다.

코드

1. java.util.Scanner 풀이

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = 0;
        int b = 0;
        while(sc.hasNext()) {
            a = sc.nextInt();
            b = sc.nextInt();
            System.out.println(a + b);
        }
    }
}

2. java.io.BufferedReader 풀이

import java.io.*;
import java.util.StringTokenizer;

class Main {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            String input = "";
            int a, b;
            while((input = br.readLine()) != null) {
                StringTokenizer st = new StringTokenizer(input," ");
                a = Integer.parseInt(st.nextToken());
                b = Integer.parseInt(st.nextToken());
                bw.write(a + b + "\n");
            }
            br.close();
            bw.close();
        } catch(IOException e) {}
    }
}

 


 

EOF의 사용 방법을 알아보자 (JAVA)

안녕하세요? 코딩중독입니다. 저번 시간에는 입출력의 속도를 빠르게 해 주는 BufferedReader와 BufferedWriter에 대해 알아보았습니다. 이번에는 EOF가 무엇인지 알아봅시다. EOF는 무엇일까? EOF는 End of F

steady-coding.tistory.com

 

댓글
공지사항