A+B - 4(10951)

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

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

문제를 이해하지 못했는데 : 이 문제는 EOF를 물어보는 문제였음

= 입력의 종료는 더이상 읽을 수 있는 데이터(EOF)가 없을 때 종료

  • EOF란?

    • 이 문제에서는 파일의 종료 조건이 없이 단지 입력만이 주어짐

      = 입력에서 더 이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하라

    • 이렇게 데이터가 더 이상 없을 때 EOF(End of File)이라고 함

  • 처리방법

    • Scanner의 경우는 읽을 데이터가 없다면 NoSuchElementException을 던짐

    • 해결 방법

      • try-catch문으로 예외 발생시 반복문을 종료

      • Scanner의 메소드인 hasNext()를 통해서 처리

Scanner 사용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

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

BufferedReader 사용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       StringTokenizer st;
       StringBuilder sb = new StringBuilder();
       String str;

       while((str = br.readLine()) != null){
           st = new StringTokenizer(str, " ");
           int a = Integer.parseInt(st.nextToken());
           int b = Integer.parseInt(st.nextToken());
           sb.append(a+b).append("\n");
       }
        System.out.println(sb);
    }
}

위의 방법을 사용하게되면 stringtokenizer의 객체가 계속되서 생성되기 때문에 시간을 잡아먹는다

  • 문제를 보게되면 정수는 항상 한자릿수 정수, " "를 기준으로 위치도 항상 고정되어있음

여기서 사용한 방법은 charAt()

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       StringBuilder sb = new StringBuilder();
       String str;

       while((str = br.readLine()) != null){
           int a = str.charAt(0) - 48;
           int b = str.charAt(2) - 48;
           sb.append(a+b).append("\n");
       }
        System.out.println(sb);
    }
}

charAt은 해당 문자의 아스키코드 값을 반환하기 때문에

정수 형태로 변경하기 위해서는 -48 을 붙힌다

참조(못 풀어서 답 찾아봄)

https://st-lab.tistory.com/40

Last updated

Was this helpful?