문제
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.
출력
X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.
입력 | 출력 |
10 5
1 10 4 9 2 3 8 5 7 6 | 1 4 2 3
|
답
◽Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = sc.nextInt();
int[] a = new int[n];
for (int c = 0; c < n; c++) {
int number = sc.nextInt();
a[c] = number;
}
for (int num : a) {
if (num < x) {
System.out.print(num + " "); // 공백으로 구분해서 출력
}
}
sc.close();
}
}
◽ BufferedReader / BufferedWriter
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(), " "); // n, x값 처리
int n = Integer.parseInt(st.nextToken()); // 문자열로 받기 때문에 int형으로 형변환
int x = Integer.parseInt(st.nextToken());
int[] a = new int[n]; //
st = new StringTokenizer(br.readLine(), " "); // 수열 a에 입력하는 값 처리
for (int i = 0; i < a.length; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < a.length; i++) {
if (a[i] < x) { // 배열에 있는 수열과 x 값 비교
bw.write(a[i] + " "); // x보다 작은 값 출력
}
}
br.close();
bw.flush();
bw.close();
}
}
❔Scanner vs BufferedReader / BufferedWriter의 차이
ㅤ | Scanner | BufferedReader / BufferedWriter |
기능 | 다양한 데이터 타입을 처리
입력을 공백 단위로 분리하여 처리 | 대량의 문자 데이터를 효율적으로 읽고 작성
1줄 씩 읽으며, 문자 읽고 작성 기능만 제공 |
성능 | 내부적으로 많은 연산 수행 | 버퍼를 통해 입출력 성능 크게 향상 |
메모리 | 내부적으로 입력 데이터를 저장하고 파싱하는 데 추가적인 메모리 사용 | 버퍼 크기만큼의 메모리 사용
데이터를 한 번에 읽고 필요한 만큼 사용 |
장점 | 편리함 제공 | 메모리와 성능 ↑ |
단점 | 메모리와 성능 ↓ | 단순히 읽고 쓰기만 하기 때문에 따로 연산 처리 |
주 사용 | 간단한 콘솔 입력 처리 | 대용량 데이터 처리 |
- BufferedReader, BufferedWriter가 Scanner보다 메모리 소요가 적고 성능이 더 나은 이유

위
의 제출은 BufferedReader, BufferedWriter
/ 아래
의 제출은 Scanner
Scanner의 코드 길이가 Buffer보다 1/2가 되지만, 메모리와 시간의 소요는 약 3배 높다.- 버퍼는 데이터를 메모리에 일시적으로 저장하는 공간이다. 데이터를 읽을 때 한 번에 큰 덩어리로 읽어 들이고 이를 버퍼에 저장하여 필요한 만큼 읽는다. ➡️ 디스크 I/O, 네트워크 I/O의 호출 횟수를 줄인다.
- 단순히 문자열을 읽는 역할만 수행한다.
➡️ 파싱에 효율적인 Scanner보다 상대적으로 메모리와 CPU 사용량이 적다.
Share article