[Java] 백준 11718번: 그대로 출력하기

U·2023년 2월 27일

백준

목록 보기
14/116

💻 문제


일단 이해하자🤔

  • 일단 입력의 개수가 주어진게 아니므로 입력이 종료되면 종료가 되도록 해야한다. 앞에서 풀었던 문제에서 더 이상 입력이 없을 경우 입력 받는 것을 종료하는 방법으로 BufferedReader를 선언하고 while((str = bfr.readLine()) != null)가 있었음을 기억하고 있었다.
  • 그래서 처음엔 while문 안에 bfw.write(str)를 사용하여 입력받을 때마다 바로 출력하려고 했으나..
    왜일까..?
while(true) {
	String str = br.readLine();
	if(str == null) {
		break;
	}
  • 다른 분의 코드에서 while문 조건을 이렇게 설정하면 bw.write를 사용해서 출력도 가능한 것 같다.
while((str = bfr.readLine()) != null) {
            bfw.write(str);
	}
  • 내 방식과는 무엇이 다를까..
  • 그래서 StringBuilder를 사용하여 append 한 뒤, System.out.print를 했더니 가 떴다. StringBuilder는 String을 연결하거나 합칠때 주로 사용하는 것으로 알고 있는데 위와 같이 풀었을때는 왜 틀렸는지 모르겠다😅

해 결 했 다 !

  • 아주 간단한 문제였다. readLine()은 한 줄을 전부 읽어온 뒤 마지막 문자, 즉 개행을 버린다. 그렇기 때문에 bfw.write(str + "\n")와 같이 사용하거나 bfw.newLine()을 사용하여 개행을 따로 출력해주어야 한다.

👀 풀이

import java.io.*;

public class Main2 {
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        String str;

        while((str = bfr.readLine()) != null) {
            sb.append(str).append('\n');
        }

        System.out.print(sb);

        bfr.close();
        bfw.flush();
        bfw.close();
    }
}

또는

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
        String str = "";

        while((str = bfr.readLine()) != null) {
            bfw.write(str + "\n");
            // 또는 bfw.write(str); bfw.newLine();
            bfw.flush();
        }
        bfr.close();
        bfw.close();
    }
}

아쉬웠던 점••

  • StringBuilderBufferedWriter의 차이점이 무엇인지 공부하기! 지금 나에겐 문제를 맞추는 것이 중요한게 아니라 개념들을 정확히 이해하고 넘어가는 것이 중요하다.
  • 처음에는 while문의 조건이 잘못된 줄 알았는데 BufferedReaderreadLine() 특징을 잘 몰랐다. 백준을 풀면서 매일같이 썼는데도 기본적인 개념이 부족하니 이런 간단한 문제에서 헤맸던 것 같다🙄 BufferedReader, BufferedWriter, StringBuilder, System.out.print의 특징을 정확하게 짚고 넘어가자.
profile
백엔드 개발자 연습생

0개의 댓글