실습/백준

그대로 출력하기 - 11718번 (Java 풀이)

chobyeonggyu03 2024. 7. 18. 13:28
반응형

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

 

 

입력

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

 

 

출력

입력받은 그대로 출력한다.

 

 

 

예제 입력 1 

Hello
Baekjoon
Online Judge

예제 출력 1 

Hello
Baekjoon
Online Judge

 

 

 

 

이 문제를 처음봤을 때 BufferedReader를 활용해 풀고 싶었고, readLine()을 통해 한줄씩 입력받아 결과값을 담아두는 String 변수에다가 해당라이 맨 끝에 개행문자 \n를 같이 추가해서 1줄씩 입력받는 방법이 가장 먼저 떠올랐기에 해당 방법으로 풀이해보았다.

 

 

 

package BAEKJOON_11718;

/*
날짜: 2024.07.18.목
내용: 백준 11718번 (그대로 출력하기)
 */

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

public class BAEKJOON_11718 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String result = "";
		String str = "";
		
		while(str != null) {								// BufferedReader가 끝까지 읽어들여 null을 반환할때까지 입력받게 무한루프 세팅
			str = br.readLine();
			
			result = str + "\n";							// 한줄을 읽으면 해당 문자열에 줄바꿈 문자 포함
			
			
			if(str == null) {								// BufferedReader가 파일 끝까지 읽어들여 null을 반환하면 반복문 탈출하기
				break;
			}
		}
		
		System.out.println(result);							// 결과 문자열 출력
		br.close();											// Reader 종료시켜주기
	}

}

 

 

 

 

 

 

 

 

 

하지만 BufferedReader는 파일의 끝을 표시해주는 EOF 값을 받아야 null값을 반환하고 파일을 읽어들이는게 아니라 위의 문제처럼 문자열의 입력을 기다리는 상태에서는 'ctrl + z' 눌러줘야 EOF값을 전달해줘 그제서야 null값을 인식하고 루프를 빠져나와 해당텍스트를 그대로 표시해주는 에러사항이 존재하였다. (ctrl+z로 EOF를 반환하는 것도 되다가 안되다가 함)

 

 

 

이러한 에러사항때문에 다른 사람들이 BufferedReader를 활용해 어떻게 풀었는지 서칭해본 결과  readLine의 특징을 이용행 한줄씩 입력받으며 println으로 줄마다 개행을 하며 바로 바로 출력값을 내는 로직을 while문의 조건식을 EOF를 따지지 않아도 되게 readLine()값자체가 null이면 즉 아무것도 입력하지 않으면 종료되게 하는식으로 조건문을 구성하여 풀이하는 것을 보고 해당 로직을 참고하여 다시 짜보았다.

 

 

package BAEKJOON_11718;

/*
날짜: 2024.07.18.목
내용: 백준 11718번 (그대로 출력하기)
 */

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

public class BAEKJOON_11718 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = "";
		
		while((str=br.readLine())!=null) {					// BufferedReader를 활용해 개행줄에 입력한 값이 없을 때까지 한줄씩출력 + println으로 줄마다 개행
			System.out.println(str);
		}
		br.close();											// Reader 종료시켜주기
	}
}

 

 

 

 

 

왼쪽이 한줄한줄 직접입력한 것이고 오른쪽이 백준사이트에서 복붙해서 테스트 해본것인데 문제와 출력값이 달라 당연히 실패겠거니 하고 코드를 올려봤는데 이게 웬 걸 맞았다고 정답처리되었다..  저번 9086번 문제를 풀 떄는 분명 정확히 출력값이 일치하지 않아 '출력형식이 잘 못 되었습다.'라는 문구를 아래 사진 처럼 출력했었는데 정말 백준은 알다가도 모르겠다..

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형