[PS] 99ํด๋ฝ ์ฝํ ์คํฐ๋ 13์ผ์ฐจ TIL (์ซ์์นด๋)
ํ๊ทธ: 99ํด๋ฝ, PS, TIL, ์ด๋ถํ์, ์ฝ๋ฉํ ์คํธ์ค๋น, ํญํด99
์นดํ ๊ณ ๋ฆฌ: PS
๋ฌธ์
ํ์ด
binarySearch
์๋ฐ Arrays
ํจํค์ง์ ์๋ binarySearch()
๋ฉ์๋๋ฅผ ์ด์ฉํด ํ์๋ค. ํด๋น ๋ฉ์๋๋ ์ ๋ ฌ๋ ์ํ์ ๋ฐฐ์ด์์ ์ํ๋ ๊ฐ์ ์ฐพ์์ฃผ๋ ์ญํ ์ ํ๋ค.
๋ด๋ถ์ ์ผ๋ก ์ด๋ถํ์์ผ๋ก ๊ตฌํ๋์ด ์์ด O(log n) ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
Arrays.binarySearch()
๋ ๊ฐ์ ์ฐพ์ผ๋ฉด ํด๋น ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด -(insertion point) - 1
์ ๊ฐ์ ๋ฐํํ๋ค.
insertion point ๋ ๋ฐฐ์ด์์ ํด๋น ๊ฐ๋ณด๋ค ํฐ ์ต์ด์ ์ธ๋ฑ์ค๋ฅผ ๋งํ๋ค. ์๋ฅผ๋ค์ด ๋ฐฐ์ด [1, 3, 5, 7, 9]
์์ 6 ์ ์ฐพ์ผ๋ ค๊ณ ํ๋ฉด 6๋ณด๋ค ํฐ ์ต์ด์ ์์น๋ 7์ ์์น์ธ 3 ์ด ๋๋ค. ์ฌ๊ธฐ์ -1์ ๊ณฑํ๊ณ -1์ ํ ๊ฐ์ธ -4๋ฅผ ๋ฐํํ๋ค.
์ฆ, ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ์์ผ๋ฉด ์์, ์์ผ๋ฉด ์์๋ผ๋ ์ ์ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
1
2
3
4
int[] test = {1, 3, 5, 7, 9};
Arrays.sort(test); // ์ด๋ถํ์์ ์ ๋ ฌ๋ ์ํ์ ๋ฐฐ์ด์์ ๋์ํ๋ค.
int search = Arrays.binarySearch(test, 6);
System.out.println("search = " + search); // search = -4
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class Main {
static FastReader scan = new FastReader();
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
input();
}
static void input() {
int N = scan.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = scan.nextInt();
}
Arrays.sort(arr);
int M = scan.nextInt();
for (int i = 0; i < M; i++) {
int isExist = Arrays.binarySearch(arr, scan.nextInt());
sb.append(isExist >= 0 ? 1 : 0).append(" ");
}
System.out.println(sb);
}
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
๋๊ธ๋จ๊ธฐ๊ธฐ