이 문제 같은 경우 Set으로 풀면 단순 포함여부로 1로 표시 하면 되고 없으면 0으로 표시하면 간단히 해결된다.
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
HashSet<Integer>set=new HashSet<>();
StringTokenizer st=new StringTokenizer(br.readLine()," ");
for(int i=0;i<n;i++){
set.add(Integer.parseInt(st.nextToken()));
}
int m=Integer.parseInt(br.readLine());
st=new StringTokenizer(br.readLine()," ");
StringBuilder sb=new StringBuilder();
for(int i=0;i<m;i++){
int target=Integer.parseInt(st.nextToken());
if(set.contains(target)){
sb.append(1).append('\n');
}
else{
sb.append(0).append('\n');
}
}
System.out.println(sb);
}
}
이분 탐색으로 풀면 이렇게 풀면 된다.
import java.util.Scanner;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int[] arr = new int[N];
for(int i = 0; i < N; i++) {
arr[i] = in.nextInt();
}
// 배열은 반드시 정렬되어있어야한다.
Arrays.sort(arr);
int M = in.nextInt();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++) {
// 찾고자 하는 값이 있을 경우 1, 없을 경우 0을 출력해야한다.
if(binarySearch(arr, in.nextInt()) >= 0) {
sb.append(1).append('\n');
}
else {
sb.append(0).append('\n');
}
}
System.out.println(sb);
}
/**
* @param arr 정렬 된 배열
* @param key 찾으려는 값
* @return key와 일치하는 배열의 인덱스
*/
public static int binarySearch(int[] arr, int key) {
int lo = 0; // 탐색 범위의 왼쪽 끝 인덱스
int hi = arr.length - 1; // 탐색 범위의 오른쪽 끝 인덱스
// lo가 hi보다 커지기 전까지 반복한다.
while(lo <= hi) {
int mid = (lo + hi) / 2; // 중간위치를 구한다.
// key값이 중간 위치의 값보다 작을 경우
if(key < arr[mid]) {
hi = mid - 1;
}
// key값이 중간 위치의 값보다 클 경우
else if(key > arr[mid]) {
lo = mid + 1;
}
// key값과 중간 위치의 값이 같을 경우
else {
return mid;
}
}
// 찾고자 하는 값이 존재하지 않을 경우
return -1;
}
}
'프로그래머스 백준 문제' 카테고리의 다른 글
| 자바 CompareTo 와 Compare 비교 및 차이(1181번,11650번) (0) | 2025.06.21 |
|---|---|
| 9935번 문자열 폭발 (2) | 2025.06.19 |
| 백준 10816 숫자카드2 (0) | 2025.06.16 |
| 백준 이분탐색 2512 (0) | 2025.06.16 |
| 2920 (0) | 2024.09.19 |