You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _posts/algorithm/2021-10-01-Binary-Search.md
+33-30Lines changed: 33 additions & 30 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,15 +13,15 @@ tags:
13
13
14
14
**이분탐색**
15
15
16
-
이분 탐색은 정렬된 배열에서 원하는 값을 빠르게 찾아내는 방법이다.
16
+
이분 탐색은 정렬된 배열에서 원하는 값이 어디에 있는지 빠르게 찾아내는 방법이다.
17
17
18
18
---
19
19
<br>
20
-
탐색의 유명한 예로 사전을 들 수가 있다. 사전의 경우, 색인이 있어서 가나다 순이라던가, 주제별로 묶여있어서 우리가 원하는 것을 색인을 통해 찾기도 한다. 하지만 이러한 색인이 없다면, 무지성으로 처음부터 끝까지 한장씩 찾아보는 수 밖에 없다.
20
+
탐색의 유명한 예로 사전을 들 수가 있다. 사전의 경우, 색인이 있어서 가나다 순이라던가, 주제별로 묶여있어서 우리가 원하는 것을 색인을 통해 찾기도 한다. 하지만 이러한 색인이 없다면, 무지성으로 처음부터 끝까지 한장씩 찾아보는 수 밖에 없다. 하지만, 데이터가 정렬되어 있다면 이분탐색을 통해 어디에 있는지 빠르게 찾을 수 있다.
21
21
22
-
<br><br>
22
+
<br>
23
23
24
-
만약 정렬되어있는 데이터에서 빠르게 찾는 방법으로 이분탐색이 쓰인다.<br><br>
24
+
<br>
25
25
26
26
**문제를 푸는 핵심은 정렬 후, 우리가 원하는 값이 현재 기준(mid)보다 큰지 작은지를 확인하여, 탐색범위를 점차적으로 줄이는 원리를 이해하는 것이다.**
27
27
@@ -30,63 +30,66 @@ tags:
30
30
31
31
<br>
32
32
33
-
실생활에서 이러한 이분 탐색이 쓰이는 경우는 UP and DOWN과 관련이 있다.
33
+
이분 탐색을 소개할때 자주 쓰이는 것이 UP and DOWN인데, 이를 생각하면서 읽으면 좋을 것이다.
34
34
35
35
<br>
36
36
37
-
A가 자신의 기말 프로그래밍 점수를 맞춰보라고 한다. 0~100점까지 있다고 했을 때 친구 B는 이 0~100까지 수 중 하나를 불러서 맞춰야 한다. 너무 불평등한 조건이기 때문에 업 다운으로 알려준다고 했을 때 과정은 다음과 같다.
37
+
주요 포인트는 범위를 left, right라는 변수로 잡고, 그 중간 값인 mid(left+right/2)를 통해 mid가 우리가 찾는 값인지 체크하는 것이다. 만약 mid가 우리가 찾는 값보다 작으면 right의 범위를 이동하여, 다음 턴에 left~mid에서 찾고, mid가 찾는 값보다 크면 left를 mid로 범위를 설정해서 다시 탐색하는 방식이다.
38
+
39
+
40
+
<br>
41
+
42
+
---
38
43
39
-
> B : 50점 이상?
40
-
>
41
-
> A : ㅇㅇ
42
-
>
43
-
> B : 70점 이상?
44
-
>
45
-
> A : ㄴㄴ
46
44
47
-
<br><br>
48
45
49
-
여기까지 진행하면 A의 점수는 50~69점으로 추정할 수 있다. 이때 질문을 적게하는 방식은 해당 범위의 반에 해당하는 것을 기준으로 이상인지 이하인지, 그 값인지 확인하는 방식이다.
46
+
아래와 같이 -1 ~ 19까지 정렬된 배열이 있다고 보자. 우리가 4라는 값이 어디있는지 찾으려면 이진 탐색을 이용해 다음과 같은 과정을 가진다. 우선 찾는 범위는 left, right 로 잡으며, 현재 비교할 값은 mid 로 지정한다.
2번의 값은 1로 4는 1보다 크기 때문에 3~4번 범위로 다시 탐색해야한다. 따라서 범위의 left를 mid+1 = 3으로 지정해서 다시 탐색한다.
73
71
74
-
<br>
72
+
다시 범위를 잡으면, mid의 값이 우리가 찾는 4와 동일하다. 여기까지 하면, 우리가 찾는 값이 index 2에 있는 것을 알 수 있다. 이처럼 우리가 찾는 값인지 확인하려면 배열을 처음부터 끝까지 10번 연산하여 찾을 수도 있지만, 이진 탐색을 이용하면 약 2번만에 우리가 원하는 것을 찾을 수 있다.
75
73
76
-
`left = 3 , right = 4, mid =3.5 → 4`로 올림(사용자 지정 올림, 내림, 반올림)
74
+
75
+
<br>
77
76
78
77
79
-
4번의 값은 7로 4는 7보다 작기 때문에 3~3번 범위로 다시 탐색해야한다. 따라서 범위의 right를 mid-1 = 3로 지정해서 다시 탐색한다.
78
+
만약 여기서 5를 찾는다고 하면 어떨까? 5는 현재 mid의 값인 4보다 크기 때문에 범위를 mid, right로 새로 잡는다.
0 commit comments