https://www.acmicpc.net/problem/1920
// 먼저 받은 수들을 배열에 넣고 정렬한다. 그 이후 이분탐색으로 수를 찾는다.
// 사실 하나의 수가 있는지 없는지 확인하는 과정은 정렬 후 이분탐색을 활용하는 것보다 하나씩 확인하는 작업이 더 빠를 수 있다.
// 하지만 지금은 여러개의 수를 확인해야 하기 때문에 정렬 후 이분탐색이 훨씬 빠른 것으로 추측해 볼 수 있다.
//프로덕션코드
import java.util.Arrays;
import java.util.Scanner;
public class Yun_1920 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] array = new int[n];
for (int i = 0; i < n; i++) {
array[i] = scanner.nextInt();
}
Arrays.sort(array);
int m = scanner.nextInt();
int[] elements = new int[m];
for (int i = 0; i < m; i++) {
elements[i] = scanner.nextInt();
}
for (int element : elements) {
if (checkArrayHasElement(array, element)) {
System.out.println(1);
} else {
System.out.println(0);
}
}
}
static boolean checkArrayHasElement(int[] array, int element) {
int indexOfLeft = 0;
int indexOfright = array.length - 1;
int i = 0;
if (element == array[indexOfLeft]) {
return true;
}
if (element == array[indexOfright]) {
return true;
}
while (true) {
i++;
if (i > 35) {
return false;
}
int indexOfMiddle = (indexOfLeft + indexOfright) / 2;
if (element == array[indexOfMiddle]) {
return true;
}
if (element > array[indexOfMiddle]) {
indexOfLeft = indexOfMiddle;
continue;
}
if (element < array[indexOfMiddle]) {
indexOfright = indexOfMiddle;
continue;
}
}
}
}
// 성공! 리팩토링 해보자.
//프로덕션코드
import java.util.Arrays;
import java.util.Scanner;
public class Yun_1920 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] array = new int[n];
setArray(scanner, n, array);
Arrays.sort(array);
int m = scanner.nextInt();
int[] elements = new int[m];
setElements(scanner, m, elements);
print(array, elements);
}
private static void print(int[] array, int[] elements) {
for (int element : elements) {
if (checkArrayHasElement(array, element)) {
System.out.println(1);
} else {
System.out.println(0);
}
}
}
private static void setElements(Scanner scanner, int m, int[] elements) {
for (int i = 0; i < m; i++) {
elements[i] = scanner.nextInt();
}
}
private static void setArray(Scanner scanner, int n, int[] array) {
for (int i = 0; i < n; i++) {
array[i] = scanner.nextInt();
}
}
static boolean checkArrayHasElement(int[] array, int element) {
int indexOfLeft = 0;
int indexOfright = array.length - 1;
int i = 0;
if (element == array[indexOfLeft]) {
return true;
}
if (element == array[indexOfright]) {
return true;
}
while (true) {
i++;
if (i > 35) {
return false;
}
int indexOfMiddle = (indexOfLeft + indexOfright) / 2;
if (element == array[indexOfMiddle]) {
return true;
}
if (element > array[indexOfMiddle]) {
indexOfLeft = indexOfMiddle;
continue;
}
if (element < array[indexOfMiddle]) {
indexOfright = indexOfMiddle;
continue;
}
}
}
}
//성공!
'코딩테스트연습 > 백준' 카테고리의 다른 글
[백준 - JAVA] 2493번 : 탑 (0) | 2023.02.07 |
---|---|
[백준 - JAVA] 18115번 : 카드 놓기 (0) | 2023.02.06 |
[백준 - JAVA] 2775번 부녀회장이 될테야 (0) | 2021.12.18 |
[백준 - JAVA] 2292번 벌집 (0) | 2021.12.18 |
[백준 - JAVA] 10814번 나이순 정렬 (0) | 2021.12.15 |