๋ฌธ์
[๋ฐฑ์ค 1920๋ฒ]
N๊ฐ์ ์ ์ A[1], A[2], …, A[N]์ด ์ฃผ์ด์ ธ ์์ ๋, ์ด ์์ X๋ผ๋ ์ ์๊ฐ ์กด์ฌํ๋์ง ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ N๊ฐ์ ์ ์ A[1], A[2], …, A[N]์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M๊ฐ์ ์๋ค์ด ์ฃผ์ด์ง๋๋ฐ, ์ด ์๋ค์ด A์์ ์กด์ฌํ๋์ง ์์๋ด๋ฉด ๋๋ค. ๋ชจ๋ ์ ์์ ๋ฒ์๋ -2^31 ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ 2^31 ๋ณด๋ค ์๋ค.
์ถ๋ ฅ
M๊ฐ์ ์ค์ ๋ต์ ์ถ๋ ฅํ๋ค. ์กด์ฌํ๋ฉด 1์, ์กด์ฌํ์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
์์
ํ์ด
๊ธฐ๋ณธ์ ์ธ ์ด๋ถ ํ์์ ์ด์ฉํ๋ ๋ฌธ์ ์ด๋ค.
low, mid, high๋ฅผ ๊ธฐ์ค์ผ๋ก mid์ ๋น๊ตํ์ฌ ๋ฒ์๋ฅผ ์ค์ฌ๋๊ฐ๋ ํ์ ๋ฐฉ๋ฒ์ด๋ค.
0. ์ฑ๊ณต ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
/**
* <a href= "https://www.acmicpc.net/problem/1920"> ๋งํฌ </a>
* <h1>๋ฌธ์ </h1>
*
* N๊ฐ์ ์ ์ A[1], A[2], …, A[N]์ด ์ฃผ์ด์ ธ ์์ ๋, ์ด ์์ X๋ผ๋ ์ ์๊ฐ ์กด์ฌํ๋์ง ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
*
*<br><br>
*
* <h1>์
๋ ฅ</h1>
*
* ์ฒซ์งธ ์ค์ ์์ฐ์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ N๊ฐ์ ์ ์ A[1], A[2], …, A[N]์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M๊ฐ์ ์๋ค์ด ์ฃผ์ด์ง๋๋ฐ, ์ด ์๋ค์ด A์์ ์กด์ฌํ๋์ง ์์๋ด๋ฉด ๋๋ค. ๋ชจ๋ ์ ์์ ๋ฒ์๋ -231 ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ 231๋ณด๋ค ์๋ค.
*
*<br><br>
* <h1>์ถ๋ ฅ</h1>
*
* M๊ฐ์ ์ค์ ๋ต์ ์ถ๋ ฅํ๋ค. ์กด์ฌํ๋ฉด 1์, ์กด์ฌํ์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
*
* */
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr); // ์ด๋ถ ํ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๋ ฌ
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < m; i++) {
int target = Integer.parseInt(st.nextToken());
if (binarySearch(arr, target) >= 0) {
System.out.println("1");
}else System.out.println("0");
}
}
public static int binarySearch(int[] arr, int key) {
int low = 0; // ๊ฐ์ฅ ์ฒ์ ์ธ๋ฑ์ค
int high = arr.length - 1; // ๊ฐ์ฅ ๋ ์ธ๋ฑ์ค
// low๊ฐ high๋ณด๋ค ์ปค์ง๊ธฐ ์ ๊น์ง ๋ฐ๋ณต
while(low <= high) {
int mid = (low + high) / 2; // ์ค๊ฐ์์น
// key๊ฐ ์ค๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ
if(key < arr[mid]) {
high = mid - 1;
}
// key๊ฐ ์ค๊ฐ๋ณด๋ค ํด ๊ฒฝ์ฐ
else if(key > arr[mid]) {
low = mid + 1;
}
// key๊ฐ ์ค๊ฐ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ
else {
return mid;
}
}
// ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ
return -1;
}
}
1. ๋ฌธ์ ํ์ด
Binary Search
public static int binarySearch(int[] arr, int key) {
int low = 0; // ๊ฐ์ฅ ์ฒ์ ์ธ๋ฑ์ค
int high = arr.length - 1; // ๊ฐ์ฅ ๋ ์ธ๋ฑ์ค
// low๊ฐ high๋ณด๋ค ์ปค์ง๊ธฐ ์ ๊น์ง ๋ฐ๋ณต
while(low <= high) {
int mid = (low + high) / 2; // ์ค๊ฐ์์น
// key๊ฐ ์ค๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ
if(key < arr[mid]) {
high = mid - 1;
}
// key๊ฐ ์ค๊ฐ๋ณด๋ค ํด ๊ฒฝ์ฐ
else if(key > arr[mid]) {
low = mid + 1;
}
// key๊ฐ ์ค๊ฐ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ
else {
return mid;
}
}
// ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ
return -1;
}
์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋จํ๋ค.
๋ฌผ๋ก , ์ด๋ถํ์์ ํ๊ธฐ ์ ์ ๋ฐฐ์ด์ ์ ๋ ฌ๋์ด ์์ด์ผ ํ๋ค.
Arrays.sort(arr); // ์ด๋ถ ํ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๋ ฌ
1. ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ์ง๊ณ ์์ํ๋ค.
2. ์ค๊ฐ์ ๊ตฌํ๋ค.
3. ์ค๊ฐ๊ณผ key๋ฅผ ๋น๊ตํ๋ค.
4. key๊ฐ ์ค๊ฐ๋ณด๋ค ์์ผ๋ฉด, high๋ฅผ mid-1๋ก ์ค์ ํ๊ณ ๋ค์ ์์ํ๋ค.
key๊ฐ ์ค๊ฐ๋ณด๋ค ํฌ๋ฉด, low๋ฅผ mid+1๋ก ์ค์ ํ๊ณ ๋ค์ ์์ํ๋ค.
key๊ฐ ์ค๊ฐ๊ณผ ๊ฐ๋ค๋ฉด, returnํ๋ค(์ฑ๊ณต)
5. ๋ง์ฝ low๊ฐ high๋ณด๋ค ์ปค์ก๋ค๋ฉด, ํ์์ ์คํจํ๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ด๋ถ ํ์์ ์์๋ดค๋ค. ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ํ์ฉํ๋ ค๋ฉด ๊ผญ ์์๋์ด์ผ ๊ฒ ๋ค ! !
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฐฑ์ค 18111 ๋ง์ธํฌ๋ํํธ ๋ ํจ์จ์ ์ผ๋ก ํ๊ธฐ (0) | 2024.03.03 |
---|---|
[Java] BFS์ ํ์ฉ - ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2024.02.29 |
[Java] DFS์ BFS (2) | 2024.02.27 |