노잼 1920번

최은창·2024년 4월 24일
post-thumbnail

문제

✏️ https://www.acmicpc.net/problem/1920

해설

1. 입력된 값을 배열에 담는다.

2. 배열을 Arrays.sort() 메서드를 활용해 정렬해준다.

3. 찾을 값(key)와 중앙값을 비교해 본다.

4. 찾을 값(key)이 중앙값보다 작으므로 중앙값보다 큰 값들은 모두 무시하면 된다.

5. 이후 찾을 값(key)와 중앙값이 일치할때까지 반복한다..

메모

1. 이진탐색은 투포인터 사용하며 중앙값은 투 포인터를 활용하여 구할 것

2. 배열을 Arrays.sort()메소드를 활용해서 정렬해 준 후 이진 탐색을 시작할 것

3. 이진 탐색 로직 짤때 얼타지 말것

4. 엉뚱한 구간에서 값 초기화 하지 말기

5. end = index -1 이거 꼭 해주기

코드

import java.util.*;


public class J1920 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        int num = scanner.nextInt();
        int[] A = new int[num];
        for(int i = 0 ; i < num ; i++){
            A[i] = scanner.nextInt();
        }
        Arrays.sort(A);


        int n = scanner.nextInt();
        int[] B = new int[n];
        for(int i = 0 ; i < n; i++){
            int start = 0;
            int end = num-1;
            B[i] = scanner.nextInt();
            int find = 0;
            while(end>=start){
                int mid = (end+start)/2;

                if(A[mid] < B[i]){
                    start = mid+1;
                }
                else if(A[mid] > B[i]){
                    end = mid-1;
                }
                else if (A[mid] == B[i]) {
                    find =1;
                    break;
                }

            }
            if( find == 1 )
                System.out.println(1);
            else System.out.println(0);
        }

    }
}
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글