[백준/Java] 10871번 X보다 작은 수 (1차원 배열)

[백준/Java] 10871번 X보다 작은 수 (1차원 배열)
muaga's avatar
Jun 15, 2024
[백준/Java] 10871번 X보다 작은 수 (1차원 배열)
 

문제


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

muaga's Hub