알고리즘 문제풀이/백준

#15552 : 빠른 A + B

모항 2022. 3. 29. 16:11

풀이방법

사용된 것:

BufferedReader

BufferedWriter

 

2022.03.29

빠른 입출력 방식을 사용해야 풀리는 문제이다.

Scanner와 System.out.print의 반복적인 사용으로는 풀 수 없다.

BufferedReader, BufferedWriter, StringBuilder 등을 사용하면 된다.

문제는 쉽지만 궁금증이 하나 생겨서 적어둔다.

 

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 t = Integer.parseInt(br.readLine());
		
		for(int i = 0; i<t; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()));
			bw.write(System.lineSeparator());
		}
		
		bw.flush();
		bw.close();
	}

}

위와 같은 코드에

5
1 1
12 34
5 500
40 60
1000 1000

위와 같은 입력값을 넣으면


.
?
d
?

위와 같은 이상한 값이 출력된다.

백준에서도 오답 처리된다.

System.lineSeparator() 대신 "\n"를 넣어봐도 동일하다.

그러나 아래의 정답 코드에서처럼

bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + System.lineSeparator());

이렇게 한 문장 안에서 개행문자를 함께 추가하면

문제없이 올바른 값이 출력된다...

개행문자의 추가 시점을 바꾼 것 뿐인데 왜 이런 이상한 결과가 나오는 것일까?

StringBuilder에서는 이런 문제가 발생한 적이 없는데 이상하다.

개행문자만 단독으로 write하면 문제가 생기는 것일까?

정말 궁금하다... 꼭 알아봐야겠다.

 

코드

Java(2022.03.29)

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 t = Integer.parseInt(br.readLine());
		
		for(int i = 0; i<t; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + System.lineSeparator());
		}
		
		bw.flush();
		bw.close();
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#2294 : 동전 2  (0) 2022.03.30
#1110 : 더하기 사이클  (0) 2022.03.29
#1003 : 피보나치 함수  (0) 2022.03.28
#11723 : 집합  (0) 2022.03.28
#15312 : 이름 궁합  (0) 2022.03.27