Don't Look Back In Anger

백준 15552번. 빠른 A+B 본문

IT/백준

백준 15552번. 빠른 A+B

버로나 2022. 5. 2. 14:33

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

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int n = Integer.parseInt(br.readLine());

		for(int i=0; i<n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			bw.write((Integer.parseInt(st.nextToken())) + (Integer.parseInt(st.nextToken())) + "\n");
		}
		br.close();

		bw.flush();
		bw.close();
	}
}

* read()와 readLine()의 차이

BufferedReader를 쓸 때 read()와 readLine() 두 가지를 사용할 수 있는데

둘 다 예제를 그대로 입력창에 복사 붙여넣기 하면

read()는 출력을 안하고 계속 입력상태에 머물고 있고

readLine() 같은 경우는 오류가 나버립니다.

 

일반적으로 BufferedReader 를 통해 입력받을때 유의하셔야 할 점이 몇가지 있습니다. 

1. 기본적으로 BufferedReader는 한 줄을 통째로 입력받는 방법으로 주로 쓰입니다.

2. readLine() 메서드는 값을 읽어올 때, String값으로 개행문자(엔터값)를 포함해 한줄을 전부 읽어오는 방식입니다.

 - 비슷한 예로 Scanner메서드 중 nextLine()도 스트링 값과 개행문자(엔터값)을 같이 읽어옵니다. (반면 next()는 개행문자는 제외하고 스트링 값만 읽어옵니다.)

 - 예제의 입력 예제를 보면 각 문장이 모두 개행문자(엔터)로 구별되있는것을 확인하실 수 있습니다. 따라서 이 문제에서 개행문자를 입력받는것은 필수입니다!

3. read() 메서드는 값을 읽어올 때, int값으로 변형하여 읽어오는 방식입니다. 

 - 예를들어 input.txt에 저장된 1이라는 숫자를 read()를 통해 읽어오면  int형 숫자 1을 읽어오는 것이 아닌, txt형식으로 저장된 ASCII 형식의 문자값 '1'을 읽어오는 것이므로 결국 int값으론 49를 읽어오는 것이 됩니다. 

 - 이를 해결하려면 int a = br.read() - 48; br.readLine(); 을 하여 ASCII 값에서 뻴셈을 이용한 뒤 엔터 값을 읽어오거나,

 int a = Integer.parseInt(br.readLine()); 를 통해 엔터값을 포함해 한줄을 통째로 입력받은 뒤 해당 스트링값을 int로 형변환 해주는 방법이 있습니다.

 

* StringTokenizer 클래스

- 하나의 문자열을 여러 개의 문자열로 분리하기 위해 사용된다.

- 문자열을 분리할 때 사용되는 기준 문자를 구분 문자(delimiter)라고 하고, 구분 문자로 분리된 문자열을 토큰(token)이라고 한다.

- 토큰을 하나씩 얻기 위해서는 nextToken() 메소드를 이용한다.

'IT > 백준' 카테고리의 다른 글

백준 8958번. OX퀴즈  (0) 2022.05.01
백준 2355번. 시그마  (0) 2022.04.26