[백준:1920] 수 찾기 (JAVA)

dev_kiiim·2022년 12월 15일
0
post-thumbnail

오늘 시험을 보고나니 이분탐색과 너무 서먹서먹한 것 같아서,,
이럼 안된다!!! 라는 생각에 문제를 풀어보았다😂

이분탐색 알고리즘에 해당하는 문제 중에서 나름 쉬운 난이도로 골라서 풀었는데,,
너무 서먹하다,,,,,,
N개의 정수중에서 정수X가 포함되어 있는지 확인하는 간단한 문제였다.


public static void main(String[] args) throws IOException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(bf.readLine());
    int[] A = new int[N];
    StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
    for(int i=0; i<N; i++) {
        A[i] = Integer.parseInt(st.nextToken());
    }
    Arrays.sort(A);

    int M = Integer.parseInt(bf.readLine());
    int[] arr = new int[M];
    StringTokenizer st1 = new StringTokenizer(bf.readLine(), " ");
    for(int i=0; i<M; i++) {
        arr[i] = Integer.parseInt(st1.nextToken());
    }

    for(int i=0; i<M; i++){
        int answer = 0;
        int start = 0;
        int end = N-1;
        while (start <= end){
            int mid = (start+end)/2;
            if(A[mid] == arr[i]){
                answer = 1;
            }
            if(A[mid]>arr[i]){
                end = mid-1;
            }else{
                start = mid+1;
            }
        }
        System.out.println(answer);
    }
}

요즘 프로그래머스로 문제를 풀었더니
백준에서 입력 값을 적어주는 부분마저 헷갈려서 구글선생님께 물어물어 풀어보았다,,
코드 중에 반절이 입력에 대한 내용인데,, 좀 더 간단하고 좋은 코드로 바꿀 수 없을까하는 생각이 든다😅

일단 이분탐색에 맞게 처음과 끝을 변수로 선언해주고, 가운데 값부터 비교하는 방법으로 구현해보았다.
입력 값을 적어주고 정렬을 해두었기 때문에 중간 값과 비교하여 앞부분인지 뒷부분인지 판단하여 탐색 속도를 높이는,,, 느낌이다.

이분탐색,, 문제를 풀어보며 좀 친해지도록 노력해야겠다😤

0개의 댓글