Post

[BOJ] 10815. ์ˆซ์ž ์นด๋“œ(JAVA)

๐Ÿ“Œ๋ฌธ์ œ

๋ฌธ์ œ

์ˆซ์ž ์นด๋“œ๋Š” ์ •์ˆ˜ ํ•˜๋‚˜๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋Š” ์นด๋“œ์ด๋‹ค. ์ƒ๊ทผ์ด๋Š” ์ˆซ์ž ์นด๋“œ N๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์ •์ˆ˜ M๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ๋Š” ์ˆซ์ž ์นด๋“œ๋ฅผ ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.
๋‘˜์งธ ์ค„์—๋Š” ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.
๋‘ ์ˆซ์ž ์นด๋“œ์— ๊ฐ™์€ ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์…‹์งธ ์ค„์—๋Š” M(1 โ‰ค M โ‰ค 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.
๋„ท์งธ ์ค„์—๋Š” ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ตฌํ•ด์•ผ ํ•  M๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์ ธ ์žˆ๋‹ค.
์ด ์ˆ˜๋„ -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ M๊ฐœ์˜ ์ˆ˜์— ๋Œ€ํ•ด์„œ, ๊ฐ ์ˆ˜๊ฐ€ ์ ํžŒ ์ˆซ์ž ์นด๋“œ๋ฅผ ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด 1์„, ์•„๋‹ˆ๋ฉด 0์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ’ช์•„์ด๋””์–ด

  1. ์ˆซ์ž ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ
    • ์ด๋ถ„ํƒ์ƒ‰์„ ์œ„ํ•ด ์ˆซ์ž ์นด๋“œ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
    • ์ด ๋ฌธ์ œ๋Š” ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง„ ์ˆซ์ž์นด๋“œ๊ฐ€ ์ˆซ์ž์นด๋“œ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
    • ์™„์ „ํƒ์ƒ‰์„ ํ•  ๊ฒฝ์šฐ N = 1e5, M = 1e5์ด๋ฏ€๋กœ NM = 1e10์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ถ„ํƒ์ƒ‰์„ ํ†ตํ•ด logN์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง„ ์นด๋“œ๋ณด๋‹ค ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž์นด๋“œ๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๋งˆ์ง€๋ง‰ ์ˆซ์ž์นด๋“œ๊ฐ€ ์ž‘์œผ๋ฉด ์—†๋Š” 0์ถœ๋ ฅ
    • ์ˆซ์ž์นด๋“œ์˜ ์ฒซ๋ฒˆ์งธ๋Š” ์ˆซ์ž์นด๋“œ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์ด๋‹ค. ๋งŒ์•ฝ ์ƒ๊ทผ์ด์˜ ์นด๋“œ๋ณด๋‹ค ์ฒซ ๋ฒˆ์งธ ์นด๋“œ๊ฐ€ ํฌ๋‹ค๋ฉด ์ˆซ์ž์นด๋“œ์—๋Š” ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง„ ์ˆซ์ž์นด๋“œ๋Š” ์—†๋Š” ๊ฒƒ์ด๋‹ค
    • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ˆซ์ž ์นด๋“œ์˜ ๋งˆ์ง€๋ง‰์€ ์ˆซ์ž ์นด๋“œ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ๊ทผ์ด ์นด๋“œ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์—†๋Š” ๊ฒƒ
  3. ์ด๋ถ„ํƒ์ƒ‰์„ ํ†ตํ•ด ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง„ ์นด๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    • mid๋ณด๋‹ค ์ƒ๊ทผ์ด์˜ ์นด๋“œ๊ฐ€ ์ž‘์œผ๋ฉด left๋ฅผ mid+1๋กœ ์ด๋™
    • mid์˜ ์™ผ์ชฝ์€ ๋ฌด์กฐ๊ฑด ์ƒ๊ทผ์ด ์นด๋“œ๋ณด๋‹ค ์ž‘๊ธฐ๋•Œ๋ฌธ์— ๋ฒ”์œ„์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค. - mid๋ณด๋‹ค ์ƒ๊ทผ์ด์˜ ์นด๋“œ๊ฐ€ ํฌ๋ฉด right๋ฅผ mid-1๋กœ ์ด๋™
    • mid์˜ ์˜ค๋ฅธ์ชฝ์€ ๋ฌด์กฐ๊ฑด ์ƒ๊ทผ์ด ์นด๋“œ๋ณด๋‹ค ํฌ๊ธฐ๋•Œ๋ฌธ์— ๋ฒ”์œ„์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค.

๐Ÿฅ‚์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.io.*;
import java.util.*;

public class Main {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();
    int N = Integer.parseInt(br.readLine());
    int[] cards = new int[N];
    StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    for (int i = 0; i < N; i++) {
      cards[i] = Integer.parseInt(st.nextToken());
    }
    int M = Integer.parseInt(br.readLine());
    int[] sangs = new int[M];
    st = new StringTokenizer(br.readLine(), " ");
    for (int i = 0; i < M; i++) {
      sangs[i] = Integer.parseInt(st.nextToken());
    }
    // init
    Arrays.sort(cards);
    for (int i = 0; i < M; i++) {
      sb.append(findCards(cards, sangs[i], 0, N - 1)).append(" ");
    }
    System.out.println(sb.toString());
  } // end of class

  public static int findCards(int[] cards, int sang, int left, int right) {
    if (cards[right] < sang || cards[left] > sang) {
      return 0;
    }
    if (cards[right] == sang || cards[left] == sang) {
      return 1;
    }
    int mid = 0;
    while (left <= right) {
      mid = (left + right) / 2;
      if (cards[mid] <= sang) {
        if (cards[mid] == sang) {
          return 1;
        }
        left = mid + 1;
      } else {
        right = mid - 1;
      }
    }
    return 0;
  }
}// end of main
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.