ssm3079   2년 전

여기서 예를들어 입력을

2

1 1

1 2

로 하면 답이 

2

3

이렇게 나오는데, 소스를 보면 처음 2 입력 후에 1 1을 입력 하면 엔터를 쳤을 때 바로 그 합인 2가 출력이 먼저 된 다음에 새 입력을 받아야 되는거 아닌가요?

왜 모든 입력이 끝나야 출력이 한꺼번에 되는건가요?

매일 Scanner와 System.out.print 밖에 안써봐서 문법조차 이해가 안가네요 ㅜㅜ

isku   2년 전

- 소스를 보면 처음 2 입력 후에 1 1을 입력 하면 엔터를 쳤을 때 바로 그 합인 2가 출력이 먼저 된 다음에 새 입력을 받아야 되는거 아닌가요?

입력과 출력 순서는 정답하고 상관이 없습니다.

입력은 System.in에서, 출력은 System.out에서 따로 동작하기 때문에 프로그램이 끝났을 때 전체 출력한 값이 정답과 일치하기만 하면 됩니다.

- 왜 모든 입력이 끝나야 출력이 한꺼번에 되는건가요?

모든 입력이 끝나야 출력되는 것이 아니라, 소스의 가장 마지막에서 bw.flush()를 했기 때문입니다. 

flush()는 콘솔에 출력하는 함수입니다.

System.out.print와 BufferedWriter의 write()는 본질적으로 같은 stream(System.out)을 사용하지만 구현에 있어서 차이가 있습니다.

입/출력은 한번 할 때마다 시간이 매우 오래걸립니다.

매번 입/출력 때문에 시간이 낭비되는 것을 방지하기 위해, 미리 읽거나 출력할 데이터를 모아놓는 방법인 Buffer를 사용합니다.

BufferdWriter는 write()를 할 때 Buffer에 데이터를 쌓아놓습니다. 그리고 Buffer가 꽉 차거나, flush()를 하는 순간 출력을 합니다.

System.out.print() 함수도 Buffer가 있습니다. 그런데 실제 구현은, write()를 하고 바로 flush()를 합니다. 그래서 그동안 출력했을 때 바로 결과값을 확인할 수 있었던 것입니다.

BufferedWriter를 사용하면서 바로 출력결과를 보고 싶으면 write()를하고 바로 flush()를 해주면 됩니다.

하지만 이는 flush()를 할 때 시간이 낭비되는 시간을 방지하기 위해 Buffer를 사용하는 의미가 없어집니다.

댓글을 작성하려면 로그인해야 합니다.