본문 바로가기

예전글/BOJ 단계별로 풀어보기

[백준][1단계][11718번] 그대로 출력하기 (Java) : NextLine()



 * 오류 지적, 오타, 내용 개선 댓글은 대환영입니다! 저도 초보니까요.


 안녕하세요, 갓벨입니다. 이번에는 백준 온라인 저지 11718번, 그대로 출력하기로 찾아뵈었습니다. 사소한 것 하나때문에 계속 런타임 에러를 뿜어내는 문제입니다.


 Next()? NextLine()?


 Next와 NextLine()은 Scanner 클래스의 메서드입니다. Scanner의 객체를 생성하고 기존에는 NextInt()처럼 특정 자료형을 받는 메서드를 이용했습니다. 둘 다 String(문자열) 자료를 입력받는데, Next()는 입력되는 문자열부터 공백 전까지, NextLine()은 입력받은 줄 전체의 문자열을 저장하는 역할을 수행합니다.

 이번 문제에서는 NextLine() 사용합니다. 문제를 봅시다.


문제


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

입력

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

출력

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

예제 입력

Hello
Baekjoon
Online Judge

예제 출력

Hello
Baekjoon
Online Judge

풀이


 입력을 받아서 그대로 출력하는 것, 별로 어렵지 않아 보입니다.

 글의 서두에서 NextLine()을 사용한다고 했었죠. 왜 쓰나면, "공백도 신경써야 하기 때문"에 Next()를 못 쓰는 겁니다 - 뭐 쓰려하면 쓸 수는 있겠지만, 있는 걸 안 쓸 필요는 없겠죠.

 우선 Scanner 객채부터 생성합시다.

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

 들어오는 문자열은 최대 100줄입니다. 중요한 것은, 최대 100줄이라고 해서 꼭 100번 반복하게 하지 않아도 된다는 것입니다. 설령 무한 반복을 하게 시켜 놓는다고 해도 문제에서는 100번만 주기 때문에, 딱 그것만 출력할 수 있으면 됩니다. 그러면 이렇게 해도 되는 걸까요?

import java.util.Scanner; class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); while(true) // 무한 반복 { String a = sc.nextLine(); //입력을 받습니다. System.out.println(a);    //입력받은 값을 출력합니다. } } }

 될 걸 기대하고 문제를 제출해 봅니다.


채점 번호아이디문제 번호문제 제목결과메모리시간언어코드 길이제출한 시간
9935150

jjongha134

11718그대로 출력하기런타임 에러Java

267 B


 기대가 무색해지게 런타임 에러가 났습니다. 틀린 것도 아니고 런타임 에러라니, 무슨 오류가 발생한 걸까요?

 바로 NoSuchElementException이었습니다. 그러니까, nextLine() 계속 입력을 받는데 마지막에 더 이상 입력받을 줄이 없으면 에러를 띄우고 끝난다는 겁니다. 그럼 hasNextLine은 뭘까요?

 hasNextLine()은 Scanner 클래스의 메서드로, boolean ( true or false ) 자료를 반환합니다. 더 입력받을 줄이 있으면 true, 더 입력받을 줄이 없으면 false를 반환합니다. 즉, 위 코드의 8행의 while(true)를 while(sc.hasNextLine())으로 바꿔야 하겠군요. 바꿔 보면 다음과 같습니다.


import java.util.Scanner; class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); while(sc.hasNextLine()) { String a = sc.nextLine(); System.out.println(a); } } }

 제출해 보니 정답이네요!


채점 번호아이디문제 번호결과메모리시간언어코드 길이제출한 시간
9935205jjongha13411718맞았습니다!!12444 KB124 msJava / 수정279 B

 그럼 다음 문제에서 봅시다!