CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /Java์˜ ์ด์ง„ ๊ฒ€์ƒ‰: ์žฌ๊ท€, ๋ฐ˜๋ณต ๋ฐ Java ์ปฌ๋ ‰์…˜
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์˜ ์ด์ง„ ๊ฒ€์ƒ‰: ์žฌ๊ท€, ๋ฐ˜๋ณต ๋ฐ Java ์ปฌ๋ ‰์…˜

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
Java์˜ ์„ ํ˜• ๊ฒ€์ƒ‰์€ ํ•ญ์ƒ ๋ฐฐ์—ด์—์„œ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ ํ˜• ๊ฒ€์ƒ‰์˜ ๋‹จ์ ์€ ๋ฌธ์ œ์˜ ๋ฐฐ์—ด์— ์ˆ˜๋งŒ ๊ฐœ์˜ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์„ ๋•Œ ๋ช…๋ฐฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ด์ง„ ๊ฒ€์ƒ‰์— ์˜ํ•ด ๊ตฌํ˜„๋œ "๋ถ„ํ•  ๋ฐ ์ •๋ณต" ๋ฐฉ๋ฒ•์€ ์‹œ๊ฐ„ ๋ฐ ๊ณต๊ฐ„ ๋ณต์žก์„ฑ์„ ์—ผ๋‘์— ๋‘” ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ด๊ณ  ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

์ด์ง„ ๊ฒ€์ƒ‰

์ด์ง„ ๊ฒ€์ƒ‰์—์„œ๋Š” ํ‚ค(๊ฒ€์ƒ‰ ์ค‘์ธ ์š”์†Œ)๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋ฐ˜๋ณตํ•ด์„œ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๋ถ„ํ• ์€ ๊ฐ€์ƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณตํ•  ๋•Œ๋งˆ๋‹ค ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„ ๊ฐ’์— ์ดˆ์ ์ด ๋งž์ถฐ์ง‘๋‹ˆ๋‹ค. ๊ฐ’์ด ์ฐพ๊ณ  ์žˆ๋Š” ํ‚ค์™€ ๊ฐ™์œผ๋ฉด ๋ฃจํ”„ ๋˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ณ„์† ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์šด๋ฐ ๊ฐ’์ด ํ‚ค๋ณด๋‹ค ํฌ๋ฉด ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ์ „๋ฐ˜๋ถ€์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ๊ทธ ๋ฐ˜๋Œ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ํ‚ค๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ „์ฒด ๋ฐฐ์—ด์ด ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.Java์˜ ์ด์ง„ ๊ฒ€์ƒ‰: ์žฌ๊ท€, ๋ฐ˜๋ณต ๋ฐ Java ์ปฌ๋ ‰์…˜ - 1

์„ ํ˜• ๊ฒ€์ƒ‰๊ณผ ์ด์ง„ ๊ฒ€์ƒ‰์˜ ์ฐจ์ด์ 

์„ ํ˜• ๊ฒ€์ƒ‰ ์ด์ง„ ๊ฒ€์ƒ‰
๋ฐฐ์—ด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ ๊ฐ’์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
๋ชจ๋“  ์–ด๋ ˆ์ด์—์„œ ์ž‘๋™ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ๋งŒ ์ž‘๋™
๋ณต์žก๋„๋Š” O(N) ๋ณต์žก๋„๋Š” O(log2N)
์ •๋ ฌ ๋ฐ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด์—์„œ ์ž‘์—… ๊ฐ€๋Šฅ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ๋งŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋œ ๋ณต์žกํ•œ ๊ตฌํ˜„ ๊ตฌํ˜„์ด ๋” ๋ณต์žกํ•จ

์ด์ง„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ด์ง„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  1. ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ง€์ ๊ณผ ๋งˆ์ง€๋ง‰ ์ง€์ ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํŠธ๋Š” ๋ฐฐ์—ด ๋ฐ ๊ฒ€์ƒ‰ ์ค‘์ธ ํ‚ค์— ๋”ฐ๋ผ ๊ฐ ๋ฐ˜๋ณต์—์„œ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
  2. ๋ฐฐ์—ด์„ ๋ฐ˜๋ณตํ•˜๊ณ  ํ˜„์žฌ ์ฒซ ๋ฒˆ์งธ ํฌ์ธํŠธ์™€ ๋งˆ์ง€๋ง‰ ํฌ์ธํŠธ ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ๊ฐ’์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ณ€์ˆ˜์™€ ๋งˆ์ง€๋ง‰ ๋ณ€์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ์‹ค์ œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  3. ํ‚ค๊ฐ€ ์ค‘๊ฐ„ ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ํ•ด๋‹น ๊ฐ’์˜ ์ธ๋ฑ์Šค๊ฐ€ ์ƒˆ๋กœ์šด "First" ๋ณ€์ˆ˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  4. ํ‚ค๊ฐ€ ์ค‘๊ฐ„ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์˜ ์ธ๋ฑ์Šค๊ฐ€ 'Last' ๋ณ€์ˆ˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  5. ์ด ์กฐ๊ฑด์€ ๋‹ค์Œ ๋‘ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ฐธ์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.
    • ์—ด์‡ ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์ „์ฒด ๋ฐฐ์—ด์ด ๋ฐ˜๋ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ณต ์ด์ง„ ๊ฒ€์ƒ‰ ๋ฐ ์žฌ๊ท€ ์ด์ง„ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ณต ์ด์ง„ ๊ฒ€์ƒ‰

๋ฐ˜๋ณต ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ ์ด์ง„ ๊ฒ€์ƒ‰ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import java.util.Scanner;
public class IterativeBinarySearch {
 
    public static void main(String[] args) {
        int arr[] = {1,3,6,8,10};
       
        System.out.println("Enter Number to Search For: ");
        Scanner input = new Scanner (System.in);
       
        int num = input.nextInt();
        int result = BinarySearchIterative(arr,num);
       
        if(result!=-1)
            System.out.println("Value Found at Index #" + result);
        else
            System.out.println("Value Not Found");
    }
 
    public static int BinarySearchIterative(int[] arr, int num){
        //Representing the Start and End Index After Division of Array
        int start = 0;
        int end = arr.length;
 
        //Loop to Iterate Through the Array
        for(int i = 0; iarr[n]){
                start = n;
            }
            //If number to search for is greater than the arr value at index 'n'               
            else{
                end = n;
            }
        }
        //If number isn't found, return -1
        return -1;
    }
}

์žฌ๊ท€ ์ด์ง„ ๊ฒ€์ƒ‰

์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์ง„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import java.util.Scanner;
public class RecursiveBinarySearch {
 
    public static void main(String[] args) {
        int arr[] = {1,3,6,8,10};
 
        System.out.println("Enter Number to Search For: ");
        Scanner input = new Scanner (System.in);
 
        int num = input.nextInt();
        int result = BinarySearchRecursive(arr,0,arr.length-1,num);
 
        if(result!=-1)
            System.out.println("Value Found at Index #" + result);
        else
            System.out.println("Value Not Found");
    }
 
public static int BinarySearchRecursive(int arr[], int a, int b, int num){
    //Base Case to Exit the Recursive Function
    if (b < 1) {
        return -1;
    }
        int n = a + (b=1)/2;
 
       //If number is found at mean index of start and end
        if(arr[n]==num)
            return n;
 
       //If number to search for is greater than the arr value at index 'n'
        else if(arr[n]>num)
            return BinarySearchRecursive(arr,a,n-1,num);
 
       //If number to search for is greater than the arr value at index 'n'
        else
            return BinarySearchRecursive(arr,n+1,b,num);
    }
 
}

์‹œ๊ฐ„ ๋ณต์žก๋„

ํ†ต๊ณผํ•˜๋Š” ๋ฐ˜๋ณต๋งˆ๋‹ค ๋ฐฐ์—ด, ์ฆ‰ ๊ฒ€์ƒ‰ ๊ณต๊ฐ„์ด ๋ฐ˜์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋งค ๋ฐ˜๋ณต 'm' ํ›„์— ๊ฒ€์ƒ‰ ๊ณต๊ฐ„์€ N/2m ํฌ๊ธฐ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋ฐฐ์—ด์˜ ๋ฐ˜๋Œ€์ชฝ์— ํ•˜๋‚˜์˜ ์š”์†Œ๋งŒ ๋‚จ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ด์ง„ ๊ฒ€์ƒ‰์˜ ๋ณต์žก๋„๋Š” k = log2N์ด ๋ฉ๋‹ˆ๋‹ค. ์„ ํ˜• ๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋ฏ€๋กœ ์ด์ง„ ๊ฒ€์ƒ‰์ด O(log2N) ๋ณต์žก๋„๋กœ ํ›จ์”ฌ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์„ ํ˜• ๊ฒ€์ƒ‰๋ณด๋‹ค ์ด์ง„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ์ด์ ์ž…๋‹ˆ๋‹ค.

๊ณต๊ฐ„ ๋ณต์žก์„ฑ

์ด์ง„ ๊ฒ€์ƒ‰์€ start, end ๋ฐ mid์˜ ์„ธ ๊ฐ€์ง€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ธ ๋ณ€์ˆ˜๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ด์ง„ ๊ฒ€์ƒ‰์€ ๊ณต๊ฐ„์— ๋Œ€ํ•ด ๋งค์šฐ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ์ด์ง„ ๊ฒ€์ƒ‰์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค. ์žฌ๊ท€ ๊ตฌํ˜„์˜ ๊ฒฝ์šฐ O(log N)์ž…๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION