개발자는 기록이 답이다

[백준/BOJ][Java][11718] 그대로 출력하기 본문

알고리즘/백준

[백준/BOJ][Java][11718] 그대로 출력하기

slow-walker 2023. 8. 25. 11:58

 

https://www.acmicpc.net/problem/11718

 

11718번: 그대로 출력하기

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시

www.acmicpc.net

 

 

입출력에 대한 개념이 없어서 진짜 오랜시간동안 굉장히 뻘짓을 많이 했다.

자꾸 Intellij에서는 마지막 입력값인 Online Judge가 출력이 안되서 결국 구글링해서 풀었다.

오히려 이런 문제가 시간이 엄청 오래걸렸는데, 문자열 파트 다 끝나면 입출력 위주로 공부해봐야겠다.

 

내가 푼 풀이

해당 코드를 intellij에서 실행하면 출력값이 하나도 안나오고 계속 다음 입력 값을 기다린다.

백준에 제출하면 통과하는데, 도대체 왜 IDE에서 출력이 안되는지 모르겠다. 입출력 문제 진짜 너무 답답합니다! 

이렇게 내 무지함이 드러나는 순간을 인지하고 더 열심히 해야겠다.

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringBuilder sb = new StringBuilder();
        while(true) {
            String str = br.readLine();
            if (str == null || str.isEmpty()) {
                break;
            }
            sb.append(str).append("\n");
        }
        br.close();
        System.out.println(sb);
    }
}
메모리 시간 언어 코드 길이
11620KB 80ms Java 8 493B

 

구글링한 풀이 1

- hasNext()함수를 이용해서 다음 입력값이 있는지 확인하고 출력한다.

import java.io.*;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {

        Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {
            System.out.println(sc.nextLine());
        }
    }
}
메모리 시간 언어 코드 길이
13836KB 128ms Java 8 273B

 

구글링한 풀이 2

- BufferedReader를 이용해서 Null인지만 체크해주면 된다.

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = "";
        while ((str = br.readLine()) != null) {
            System.out.println(str);
        }
    }
}
메모리 시간 언어 코드 길이
12108KB 84ms Java 8 342B

 

다른 사람 풀이 1

- IDE에서도 출력되는 코드이다.

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        byte[] b = new byte[7000];
        System.in.read(b);
        System.out.println(new String(b).trim());
    }
}
메모리 시간 언어 코드 길이
12892KB 68ms Java 8 209B

 

다른 사람 풀이 2

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


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

        boolean isTrue = true;
        while(isTrue){
            lineReader = br.readLine();
            if(lineReader != null){
                sb.append(lineReader+"\n");
                isTrue = true;
            }else{
                isTrue = false;
            }
        }

        System.out.println(sb.toString());
    }
}
메모리 시간 언어 코드 길이
13096KB 68ms Java 8 598B