PS/๋ฐฑ์ค€

[๋ฐฑ์ค€ | 10815] ์ˆซ์ž ์นด๋“œ - Java

yaho!! 2024. 8. 8. 00:04

๐Ÿ“ƒ ์ œ์ถœ

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


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

        int N = Integer.parseInt(br.readLine());
        int[] cards = new int[N];
        String[] inputNum1 = br.readLine().split(" ");
        for (int i = 0; i < inputNum1.length; i++) {
            cards[i] = Integer.parseInt(inputNum1[i]);
        }

        Arrays.sort(cards);

        int M = Integer.parseInt(br.readLine());
        int[] compareCards = new int[M];
        String[] inputNum2 = br.readLine().split(" ");
        for (int i = 0; i < inputNum2.length; i++) {
            compareCards[i] = Integer.parseInt(inputNum2[i]);
        }

        for (int i = 0; i < compareCards.length; i++) {
            bw.write(binarySearch(cards, compareCards[i]) + " ");
        }

        br.close();
        bw.flush();
        bw.close();
    }

    public static int binarySearch(int[] arr, int target) {
        int low = 0;
        int high = arr.length - 1;

        while (low <= high) {
            int mid = low + (high - low) / 2;

            if (arr[mid] == target) {
                return 1;
            }

            if (arr[mid] < target) {
                low = mid + 1;
            }

            if (arr[mid] > target) {
                high = mid - 1;
            }
        }
        return 0;
    }
}

โœ ํ’€์ด

์‹œ๊ฐ„ ์ œํ•œ : 2์ดˆ
N(1 ≤ N ≤ 500,000)
M(1 ≤ M ≤ 500,000)

์ƒ๊ทผ์ด์˜ ์นด๋“œ๋ฅผ ์ง์ ‘ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ $O(n * M)$ ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์ง„ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์•ผ ํ•˜๋ฉฐ, ์ž๋ฐ”์˜ Arrays.sort() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์นด๋“œ๋ฅผ ์ •๋ ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์ดํ›„ ์ •๋ ฌ๋œ ์นด๋“œ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ๋น„๊ต ์นด๋“œ๋ฅผ ์ด์ง„ ํƒ์ƒ‰์„ ํ†ตํ•ด ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๋น„๊ต ์นด๋“œ์— ๋Œ€ํ•ด ์ด์ง„ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” $O(M log N)$ ์ด ๋ฉ๋‹ˆ๋‹ค. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ด์ง„ ํƒ์ƒ‰์„ ํฌํ•จํ•œ ์ด ์ฝ”๋“œ์˜ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” $๐‘‚((๐‘+๐‘€)logโก๐‘)O((N+M)logN)$ ์ž…๋‹ˆ๋‹ค.