Post

Binary Serach_์ด๋ถ„๊ฒ€์ƒ‰

๐Ÿ”ต ThingsILearned

โœ”๏ธ ์ด๋ถ„๊ฒ€์ƒ‰

์ด๋ถ„๊ฒ€์ƒ‰: ๊ฒ€์ƒ‰ํ•  ๋ฒ”์œ„๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์—ฌ๊ฐ€๋ฉฐ ์ฐพ๋Š” ๊ฒ€์ƒ‰ โญ๏ธโญ๏ธโญ๏ธ ์ด๋ถ„๊ฒ€์ƒ‰์€ ์ •๋ ฌ์ด ๋œ ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ์ด๋ถ„๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)

์ด๋ถ„๊ฒ€์ƒ‰์„ ํ•  ๋•Œ๋Š”
์ฐพ๋Š” ๊ฐ’, ์‹œ์ž‘ ์œ„์น˜, ์ข…๋ฃŒ ์œ„์น˜๋ฅผ ์•Œํ•˜์•ผ ํ•œ๋‹ค.
์ค‘๊ฐ„ ์œ„์น˜๋ฅผ ์ฐพ์„ ๋•Œ๋Š” (์‹œ์ž‘ ์œ„์น˜ + ์ข…๋ฃŒ ์œ„์น˜) /2
์ด ์ค‘๊ฐ„ ์œ„์น˜๊ฐ€ ์ฐพ๋Š” ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด ๊ฒ€์ƒ‰ ์ข…๋ฃŒ,
์ฐพ๋Š” ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋ฐฐ์—ด์˜ ์˜ค๋ฅธ์ชฝ(๋” ํฐ ์ชฝ) ๊ฒ€์ƒ‰
์ฐพ๋Š” ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋ฐฐ์—ด์˜ ์™ผ์ชฝ(๋” ์ž‘์€ ์ชฝ) ๊ฒ€์ƒ‰

Screenshot 2024-05-28 at 11 54 35

โœ… n๊ฐœ์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋‹ค์Œ m์ด ์–ด๋””์žˆ๋Š”์ง€ ์ด๋ถ„๊ฒ€์ƒ‰์œผ๋กœ ๊ตฌํ•˜์„ธ์š”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.example.ct_inflean_2024.String;

import java.util.*;

class Main {
    public int solution(int n, int m, int[] input){
        int answer=0;
        Arrays.sort(input); //์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
        int start=0;
        int end= n-1;
        while(start<=end){
            int middle= (start+end)/2;
            if(m == input[middle]){
                answer= middle+1;
                break;
            }
            if(m < input[middle]){
                end= middle-1;
            }else{
                start=middle+1;
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n= sc.nextInt();
        int m= sc.nextInt();
        int[] input= new int[n];
        for(int i=0; i<n; i++){
            input[i]= sc.nextInt();
        }
        System.out.println(T.solution(n, m, input));
    }
}
//โญ๏ธinput:
8 32
23 87 65 12 57 32 99 81
//โญ๏ธoutput:
3

๐ŸŸข

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Main {
    public int solution(int n, int m, int[] input){
        int answer=0;
        Arrays.sort(input); //์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
        int start=0;
        int end= n-1;
        int middle= (int) (start+end)/2;
        while(m != input[middle]){
            if(m < input[middle]){
                end= middle-1;
                middle= (int) (start+end)/2;
            }else{
                start=middle+1;
                middle= end;
            }
        }
        answer= middle+1;
        return answer;
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n= sc.nextInt();
        int m= sc.nextInt();
        int[] input= new int[n];
        for(int i=0; i<n; i++){
            input[i]= sc.nextInt();
        }
        System.out.println(T.solution(n, m, input));

    }
}
This post is licensed under CC BY 4.0 by the author.