X보다 작은 수

※ Point :
정수 N개로 이루어진 A 수열에서, 정수 X보다 작은 수를 모두 출력하는 문제입니다.
정수 입력값을 변수 N에 담고 변수 N만큼 A 배열을 생성한 다음에,
for문을 돌려 배열 A에서 X보다 크기가 작은 값만 조건문으로 출력하면 됩니다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken()); // N개의 수
int X = Integer.parseInt(st.nextToken()); // X보다 작은 수
int[] A = new int[N]; // 출력을 위한 배열
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < A.length; i++) {
A[i] = Integer.parseInt(st.nextToken()); // 배열에 N개의 수 삽입
}
for(int i = 0; i < A.length; i++) {
if (A[i] < X) { // 배열을 순회하며 X보다 작은 값을 산출출
bw.write(A[i] + " ");
}
}
br.close();
bw.flush(); // 남아있는 데이터 모두 출력
bw.close();
}
}
이번엔 Scanner 대신 BufferedReader로 풀이해봤습니다.
흔히들 BufferedReader가 Scanner보다 속도가 더 빠르다고 하는데, 그 이유는 BufferedReader는 입력 데이터를 버퍼(임시 저장 공간)에 저장하고, Scanner와 달리 입력 데이터를 파싱(parsing)하여 다양한 타입으로 변환하는 과정을 거치지 않고 단순히 텍스트 데이터를 읽어 들이는 데 집중하는 설계를 가지고 있기 때문입니다.
그렇다고 Scanner가 버퍼를 가지고 있지 않은 건 아닙니다. 단지 상대적으로 BufferedReader의 버퍼 크기(8192byte(8KB)) 가 Scanner의 버퍼 크기 (1024byte(1KB)) 보다 훨씬 더 크기때문에 속도가 더 빠르게 느껴지는 겁니다.
때문에 sc.nextInt(); 처럼 연속된 입력값을 자체적으로 파싱하는 과정을 거치는 Scanner와 달리 BufferedReader는 위의 코드에서 Integer.parseInt(st.nextToken()); 과 같이 사용자가 직접 데이터를 파싱하고 적절한 타입으로 변환해야 합니다.
이와 같이 편의성을 제공하지만 성능은 느린 Scanner 이냐,
속도는 빠르지만 사용자가 직접 파싱하는 과정을 거쳐야 하는 BufferedReader 이냐,
어떤 것을 사용할지는 각자의 상황에 따라 다를 수 있습니다.
주로 대량의 텍스트 데이터를 빠르게 읽어야 할 때에는 BufferedReader를, 입력된 데이터를 다양한 타입으로 쉽게 변환할 수 있어야 하는 상황일 때(ex : 사용자 입력을 다룰 때)에는 Scanner가 더 유리할 수 있습니다.
※ 참고문서 :
- Scanner vs BufferedReader - 이론
- Scanner vs BufferedReader - 문제풀이 (백준 10807)
- [백준] 15552번 : 빠른 A+B - JAVA, BufferedReader, BufferedWriter
'알고리즘(코테) > 백준(BACKJOON) 알고리즘 - 자바' 카테고리의 다른 글
| [백준(BACKJOON) 알고리즘] 2562번 자바 문제풀이 - 최대값 (0) | 2024.02.19 |
|---|---|
| [백준(BACKJOON) 알고리즘] 10818번 자바 문제풀이 - 최소, 최대 (0) | 2024.02.18 |
| [백준(BACKJOON) 알고리즘] 10807번 자바 문제풀이 (0) | 2024.02.09 |
댓글