본문 바로가기
알고리즘/코드트리 문제풀이

코드트리 [자바 java] 숫자 빠르게 찾기

by 잔디🌿 2023. 9. 8.

    https://www.codetree.ai/missions/8/problems/find-number-fast?&utm_source=clipboard&utm_medium=text 

     

    코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

    국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

    www.codetree.ai

    이 문제는 배열 내에서 이진탐색을 이용해서 주어진 수를 빠르게 찾아 출력해야합니다.

    나는 일반적인 이진탐색 방법으로 문제를 풀었다.

    우선, 배열에 주어진 수를 배열에 넣고 정렬했습니다. 그 다음, 현재 탐색하고 있는 부분배열의 왼쪽과 오른쪽을 나타내는 변수를 각각 설정한 다음 이 두 인덱스의 가운데 값을 원하는 값과 비교해서 더 크다면 왼쪽을 나타내는 변수를 mid + 1로 설정하였고, 더 작다면 오른쪽을 나타내는 변수를 mid-1하였다.

     

     

    import java.io.*;
    import java.math.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            StringBuilder sb = new StringBuilder();
    
            int n = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());
    
            //int[] arr= new int[100000];
    
            int[] arr = new int[n];
             st = new StringTokenizer(br.readLine());
    
            for(int i = 0;i<n;i++){
                arr[i] = Integer.parseInt(st.nextToken());
            }
    
            Arrays.sort(arr);
    
            for(int i = 0;i<m;i++){
                int a = Integer.parseInt(br.readLine());
                int left = 0;
                int right = n-1;
                int mid = 0;
    
                while(left <= right){
                    mid = (left + right) /2;
                    if(arr[mid] == a) {
                        sb.append((mid+1) + "\n");
                        //System.out.println(mid);
                        break;
                    }
                    else{
                        if(arr[mid] < a){
                            left = mid + 1;
                        }
                        else{
                            right = mid -1;
                        }
                    }
                }
    
                if(left > right){
                    sb.append(-1 + "\n");
                 }     
                }
    
            System.out.println(sb);
            
    
    
        }
    }