#11718 - 그대로 출력하기
📌 문제 정보
- 문제 이름 : #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