[백준] 10871번 : X보다 작은 수 - JAVA [자바]
https://www.acmicpc.net/problem/10871
- 문제
엄청 쉬운 문제다.
if 문과 for문의 조합 문제인 느낌이다.
- 3가지 풀이방법을 제시한다.
기본적으로 배열을 이용하여 풀이해보고, 배열을 이용하지 않고 쓰는 방법을 써보고자 한다.
그리고 마지막으로 성능을 최대화 한 풀이방법을 제시하고자 한다.
- 풀이
- 방법 1
배열을 이용한 방법이다.
아마 대부분은 이 방법을 가장 쉽게 이해할 수 있을 것이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int X = in.nextInt();
int arr[] = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = in.nextInt();
}
in.close();
for (int i = 0; i < N; i++) {
if (arr[i] < X) {
System.out.print(arr[i] + " ");
}
}
}
}
방법은 일단 배열에 입력받은 수열을 다 저장한 뒤 다시 한 번 반복문으로 배열을 검사하여 조건문에 따라 출력해주면 된다.
- 방법 2
배열을 이용하지 않는 방법이다.
즉 입력받음과 동시에 if 문으로 검사해서 주어진 수 보다 작은 경우 StringBuilder 에 저장해주는 방법이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int X = in.nextInt();
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < N ; i++) {
int value = in.nextInt();
if(value < X) {
sb.append(value+" ");
}
}
System.out.println(sb);
}
}
이렇게 하면 배열을 굳이 생성 할 필요도 없고 for문도 한 번만 쓰면 되기 때문에 더욱 간단한 코드가 된다.
- 방법 3
방법 2 와 알고리즘은 같다. 다만 Scanner 로 입력받는 것이 아닌 BufferedReader 로 입력받아보려 한다.
대신 BufferedReader 로 입력받는만큼 문자열 분리를 해주어야 하기 때문에 StringTokenizer 또한 필요하다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
int value = Integer.parseInt(st.nextToken());
if (value < X)
sb.append(value).append(' ');
}
System.out.println(sb);
}
}
위와 같이 짜면 입력부분에서 BufferedReader 가 Scanner 대비 워낙 좋은 성능을 보여주기 때문에 시간을 단축시킬 수 있다.
- 성능 차이
위에서 부터 순서대로
채점 번호 : 17833199 - BufferedReader + 배열 X
채점 번호 : 17833174 - Scanner + 배열 X
채점 번호 : 17833164 - Scanner + 배열 O
시간을 보면 BufferedReader 와 Scanner 의 성능차이 및 출력 방법에 따른 성능 차이 또한 볼 수 있다.
- 정리
이렇게 다양한 출력 방법이 있다. 내용자체는 그리 어렵지 않은 부분이니 무리 없이 풀었을 것이라 본다. 혹여 어렵거나 이해가 안되는 부분이 있다면 언제든 댓글 남겨주시기를 바란다.
'JAVA - 백준 [BAEK JOON] > 1차원 배열' 카테고리의 다른 글
[백준] 8958번 : OX퀴즈 - JAVA [자바] (13) | 2020.03.09 |
---|---|
[백준] 1546번 : 평균 - JAVA [자바] (20) | 2020.03.02 |
[백준] 3052번 : 나머지 - JAVA [자바] (36) | 2020.03.02 |
[백준] 2562번 : 최댓값 - JAVA [자바] (35) | 2020.02.27 |
[백준] 10818번 : 최소, 최대 - JAVA [자바] (85) | 2020.02.27 |