
✅ 문제
입력된 값 그대로 출력하는 프로그램 짜기
📥 입력
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 있을 수도 있다.
📥 출력
입력 받은 그대로 출력한다.
💡 풀이
11718번과 유사한 문제로 띄어쓰기를 포함한 문자열을 입력받아 그대로 출력해주면 된다.
입력이 몇 줄 들어오는지 주어지지 않았기 때문에, 계속 입력이 들어온다고 가정하고
while-loop를 이용해 입력을 받고, 입력받은 것이 없으면 loop을 종료해 주면 된다.
input()과 sys.stdin.readlines()를 이용하여 두 가지로 풀이했다.
✅ 1. BufferedReader 클래스를 이용한 풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while ((s = br.readLine()) != null) {
System.out.println(s);
}
}
}
자바에서 입력받는 객체로 Scanner을 많이 사용한다. 그런데 백준 문제를 풀다 보면 시간 제한이나 메모리 제한이 주어진다. 이 때, 효율적이고 빠른 입출력을 위해 사용되는 것이 BufferedReader이다.
BufferedReader는 입력 스트림에서 데이터를 읽어와서 버퍼에 저장한다. 이 객체가 가진 readLine() 메서드를 사용하면, readLine()을 호출할 때마다 버퍼에서 데이터를 한 줄씩 읽어와 문자열로 반환한다. 그리고 버퍼에 저장된 데이터가 소비되어 버퍼에서 제거된다.
<readLine() 메서드의 작동 원리>
- BufferedReader 객체가 생성될 때, 내부적으로 버퍼를 가지고 있다.
- readLine() 메서드가 호출되면, BufferedReader는 내부 버퍼에서 줄 단위로 데이터를 읽어온다.
- 버퍼에서 한 줄의 데이터를 읽은 후, 개행 문자('\n' 또는 "\r\n")를 만날 때까지 데이터를 읽어온다.
- 개행 문자를 만나면, 그 동안에 읽은 데이터를 문자열로 반환합니다. 개행 문자는 반환된 문자열에 포함되지 않는다.
- 파일의 끝에 도달하면, readLine() 메서드는 null을 반환하여 호출자에게 파일의 끝임을 알려준다.
✅ 2. Scanner 객체를 이용한 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String input = sc.nextLine();
System.out.println(input);
}
sc.close();
}
}'코딩테스트 > BaekJoon' 카테고리의 다른 글
| [백준] 1330번 두 수 비교하기 - 자바 / java (2) | 2024.04.02 |
|---|---|
| [백준] 10172번 개 - 자바/java (0) | 2024.04.02 |
| [백준] 10171번 고양이 - 자바/java (0) | 2024.04.02 |
| [백준] 11718번 그대로 출력하기 - 파이썬/python3 (0) | 2024.03.28 |
| [백준] 10869번 사칙연산 - 파이썬/python3 (1) | 2024.03.27 |