๐ [๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ ํ์ด] 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");
}
}