๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.1920 ์ˆ˜ ์ฐพ๊ธฐ ๋ฌธ์ œ ํ’€์ด - java

๐Ÿ“– ๋ฌธ์ œ

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

N๊ฐœ์˜ ์ •์ˆ˜ A[1], A[2], โ€ฆ, A[N]์ด ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ, ์ด ์•ˆ์— X๋ผ๋Š” ์ •์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ” ์ ‘๊ทผ๋ฒ•

Q.1920 ์ˆ˜ ์ฐพ๊ธฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

n๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๊ณ  ๊ทธ ์ค‘์— x๋ผ๋Š” ์ •์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ x๋ผ๋Š” ์ •์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ด๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์—

set์„ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

set์— n๊ฐœ์˜ ์ •์ˆ˜๋“ค์„ ๋„ฃ์–ด์ฃผ๊ณ  set์— x๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋ฉด ๋์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ํ’€๊ณ ๋‚˜๋‹ˆ ๋ถ„๋ฅ˜๊ฐ€ binary search ๋กœ ๋˜์–ด์žˆ์–ด

binary search ๋ฅผ ์ด์šฉํ•ด์„œ๋„ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

n๊ฐœ์˜ ์ •์ˆ˜๋“ค์„ ์ž…๋ ฅ๋ฐ›๊ณ  ์ •๋ ฌ์„ ํ•ด์ค€ ํ›„

binary search ๋ฅผ ์ด์šฉํ•˜์—ฌ

start ์ง€์ ๊ณผ end ์ง€์ ์˜ ์ค‘๊ฐ„ mid์—

x๊ฐ€ ์žˆ๋‹ค๋ฉด 1์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜๊ณ 

mid ๊ฐ’์ด x๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ํ˜„์žฌ mid ๋ณด๋‹ค ์•ž์— ์žˆ๋Š” ๊ฐ’๋“ค์€ ์ „๋ถ€ x๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์ด๋ฏ€๋กœ

mid ์˜ ์ „์— ์žˆ๋Š” ์ˆ˜๋“ค์„ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

start ๋ฅผ mid+1 ๋กœ ์กฐ์ •ํ•ด์ค๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ mid ๊ฐ’์ด x๋ณด๋‹ค ํฌ๋‹ค๋ฉด mid์˜ ๋’ค์— ๊ฐ’๋“ค์€ ์ „๋ถ€ x๋ณด๋‹ค ํฐ ์ˆ˜์ด๋ฏ€๋กœ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋‹ˆ

end ๋ฅผ mid-1๋กœ ์กฐ์ •ํ•ด์ค๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ

n๊ฐœ์˜ ์ •์ˆ˜๋“ค ์ค‘ x๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ

set์„ ์ด์šฉํ•œ ์ฒซ ๋ฒˆ์งธ ํ’€์ด ๋ฐฉ๋ฒ•


package problem.binary_search.Q1920;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

public class Main_1920_1 {
    static int n, m;
    static Set<Integer> set = new HashSet<>();
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        String[] temp = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            set.add(Integer.parseInt(temp[i]));
        }
        m = Integer.parseInt(br.readLine());
        temp = br.readLine().split(" ");
        for (int i = 0; i < m; i++) {
            int num = Integer.parseInt(temp[i]);
            if (set.contains(num)) {
                sb.append("1\n");
            } else {
                sb.append("0\n");
            }
        }
        br.close();
        System.out.println(sb.toString());
    }
}

binary search๋ฅผ ์ด์šฉํ•œ ๋‘ ๋ฒˆ์งธ ํ’€์ด ๋ฐฉ๋ฒ•


package problem.binary_search.Q1920;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main_1920_2 {
    static int n, m;
    static int[] numbers;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        numbers = new int[n];
        String[] temp = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            numbers[i] = Integer.parseInt(temp[i]);
        }

        m = Integer.parseInt(br.readLine());
        temp = br.readLine().split(" ");

        for (int i = 0; i < m; i++) {
            int num = Integer.parseInt(temp[i]);
            binarySearch(0,n-1,num);
        }

        br.close();
        System.out.println(sb.toString());
    }

    private static void binarySearch(int start,int end,int data){
        Arrays.sort(numbers);
        while (start <= end) {
            int mid = (start + end) / 2;
            if (numbers[mid] == data) {
                sb.append("1\n");
                return;
            }
            else if(numbers[mid] < data){
                start = mid+1;
            }
            else{
                end = mid-1;
            }
        }
        sb.append("0\n");
    }
}

Written on March 19, 2021