코딩테스트연습/백준

[백준 - JAVA] 1920번 : 수 찾기

:)jun 2021. 12. 27. 15:38

https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

// 먼저 받은 수들을 배열에 넣고 정렬한다. 그 이후 이분탐색으로 수를 찾는다.
// 사실 하나의 수가 있는지 없는지 확인하는 과정은 정렬 후 이분탐색을 활용하는 것보다 하나씩 확인하는 작업이 더 빠를 수 있다.
// 하지만 지금은 여러개의 수를 확인해야 하기 때문에 정렬 후 이분탐색이 훨씬 빠른 것으로 추측해 볼 수 있다.

//프로덕션코드


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;
            }
        }
    }
}

//성공!