CODING TEST/baekjoon

#11718 - 그대로 출력하기

iamyuunzo 2025. 7. 10. 12:34

📌 문제 정보

- 문제 이름 : #11718번 - 그대로 출력하기

- 문제 링크: https://www.acmicpc.net/problem/11718

 

 

📌 문제 요약

- 핵심 조건: 입력 받은 대로 출력하는 프로그램을 작성하시오

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

 

 

📌 내 풀이 및 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();

        System.out.println(a);
    }
}

 

<-- 내가 처음에 어떻게 풀었는지 -->

- 단순히 print로 입력받걸 출력하면 되는줄 알았으나 하나 입력하고 나면 출력되고 프로세스가 종료되기 때문에 틀렸음.

- 문제에서는 여러 줄 입력받고 띄어쓰기를 포함해서 한 줄을 통쨰로 읽은 걸 그대로 출력해야하는데 조건 불충족.

 

 

📌 최종 정답 및 풀이

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            System.out.println(line);
        }
    }
}

<-- 풀이 요약 -->

- while문을 쓴 이유 : 입력이 몇 줄이 될지 모르기 때문에 hasNextLine()으로 EOF까지 돌려야 함.

- EOF : End Of File (파일/입력의 끝) = 입력이 더 이상 없을 때.

 

 

 

<-- 다른 풀이 요약 -->

        System.out.printf("%.10f
", (double) A / B);

- "실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다. 10-9 이하의 오차를 허용한다는 말은 꼭 소수 9번째 자리까지만 출력하라는 뜻이 아니다." -> 출력 형식 제한 있는 문제는 무조건 printf 쓰는 게 실수 방지에 좋음.
- printf : 소수점 자리수를 딱 고정하기 때문에 형식상 정확함. (습관화 하기)

- 코딩 테스트는 출력 형식 실수 때문에 오답 되는 경우가 많음. (%.6f, %.10f 이런거 습관처럼 쓰면 훨씬 안정적.)

- "소수점 N번째 자리까지 출력" 이라고 조건 있을 때 출력 형식이 정확해야 정답 처리 되니까..

- %.10f = 소수점 10자리



📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

- EOF : 더 이상 입력할 줄이 없을 때 (입력이 다 끝날 때까지 계속 읽어야 할 때)

 

- hasNextLine() : 다음 줄이 있나 확인함. (있으면 true, 없으면 false)

구분  의미  동작  언제 true 언제 false
EOF (End Of File) 입력의 끝 더 이상 읽을 데이터 없음 해당 없음 모든 입력 다 읽었으면 EOF
hasNextLine() 다음 줄 있나 확인 입력 스트림에 다음 줄이 있으면 true 아직 읽을 줄 있으면 true EOF에 도달하면 false
사용 예 while (sc.hasNextLine()) 줄 단위 입력 반복 줄이 계속 있으면 반복 줄 없으면 반복 종료

 

** Scanner 입력 메서드 비교표 **

메서드  무슨 뜻? 동작  언제 true 언제 false 사용 상황
next() 단어 하나 읽기 공백(띄어쓰기/엔터) 전까지만 읽음 hasNext()로 다음 단어 있으면 true EOF 오면 false 단어, 숫자 하나씩 입력 받을 때
nextLine() 한 줄 통째로 읽기 줄 끝(엔터)까지 모두 읽음 hasNextLine()로 다음 줄 있으면 true EOF 오면 false 한 줄 입력, 문장 입력 (띄어쓰기 포함)
hasNext() 다음 단어/토큰 있나? 다음 단어 있으면 true 입력이 남아있으면 true EOF면 false while (sc.hasNext())로 단어 반복 읽기
hasNextLine() 다음 줄 있나? 다음 줄 있으면 true 줄이 있으면 true EOF면 false while (sc.hasNextLine())로 여러 줄 읽기

- 1 (단어 하나)   /   2 (한 줄 문장)    /    3 (단어 반복)   /    4 (여러 줄 반복)

- Hello World 입력했을 때 : next() -> Hello / nextLine() -> Hello World