์ด์ง ํ์ (Binary Search)
์ด ๊ธ์ ๋ชฉ์ฐจ5๊ฐ
๐ ์ด์ง ํ์ (Binary Search)
์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ค์ฌ๊ฐ๋ฉฐ ์ํ๋ ๊ฐ์ ์ฐพ๋๋ค.
๐ ์ด์ง ํ์ ๊ฐ๋
-
์ ๋ ฌ๋ ๋ฐฐ์ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
-
ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ค์ฌ ๋น ๋ฅด๊ฒ ๊ฐ์ ์ฐพ์
-
์๊ฐ ๋ณต์ก๋: O(log N) โ ๋งค์ฐ ํจ์จ์ !
์กฐ๊ฑด : ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผํจ
๐ ํ์ ๊ณผ์
-
์ข์ธก ์ธ๋ฑ์ค (left) ์ค์ / ์ด๊ธฐ ์ค์ ์ array์ ์์ (0 index)
-
์ฐ์ธก ์ธ๋ฑ์ค (right) ์ค์ / ์ด๊ธฐ ์ค์ ์ array์ ๋ง์ง๋ง index
-
์ค๊ฐ ์ธ๋ฑ์ค (min) ์ค์ / (left + right) / 2 ๋ก ๊ฐฑ์
๋ฒ์์ ์ค๊ฐ ๊ฐ์ ํ์ธํ์ฌ ํ๊ฒ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ์์ผ๋ฉด right ํน์ left ๊ฐ์ mid๊ฐ์ผ๋ก ์ค์ ํ๋ค.
๐ฅ๏ธ ์์ : 34๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ ๋

**1. ์ ์ฒด ๋ฒ์์์ ์ค๊ฐ๊ฐ์ ํ์ธํ๋ค. **
์ด ๋, ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ 34์ด๊ณ mid๊ฐ์ 27์ด๋ฏ๋ก ํ์ฌ์ ์ค๊ฐ๊ฐ์ ํ๊ฒ๊ฐ๋ณด๋ค ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ฒ์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ขํ์ผํ๋ค.
left = mid + 1, mid = (left + right) / 2๋ก ๊ฐฑ์ ํ๋ค.
2. ๋ค์ ์ค๊ฐ๊ฐ์ 38์ด๋ค. ํ๊ฒ ๊ฐ์ 34์ด๊ณ ์ค๊ฐ๊ฐ๋ณด๋ค ์์ผ๋ฏ๋ก ๋ฒ์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ขํ๋ค. right = mid - 1, mid = (left + right) / 2๋ก ๊ฐฑ์ ํ๋ค.
3. ์ค๊ฐ๊ฐ์ 30์ด๋ฏ๋ก ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฒ์๋ฅผ ์ขํ๋ค.
4. ํ์ฌ left, mid, right๊ฐ ๊ฐ์ ์ธ๋ฑ์ค๋ก ์ค์ ๋์๋ค. ํ์ฌ ์ค๊ฐ๊ฐ์ ํ๊ฒ๊ฐ๊ณผ ์ผ์นํ๊ธฐ์ ํ๊ฒ๊ฐ์ด ๋ช ๋ฒ ์ธ๋ฑ์ค์ ์์นํ๋์ง ํ์ธํ์๋ค.
์ด์ฒ๋ผ ์ด์งํ์์ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์ ์ ๊ณ์ฐ์ผ๋ก ๋น ๋ฅด๊ฒ ํ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์๋ผ ์ ์๋๋ฐ,
์ฌ๊ธฐ์ right = mid - 1 ํน์ left = mid + 1์ฒ๋ผ ์๋ก์ด ๋ฒ์๋ฅผ ๊ธฐ์กด mid ์ธ๋ฑ์ค ๋ณด๋ค 1 ๋ ๋๊ฑฐ๋ ๋ฎ์ ๊ฐ์ผ๋ก ์ค์ ํ๋ ํน์ง ๋๋ถ์ ์ฐพ์ผ๋ ค๋ ํ๊ฒ ๊ฐ์ด ๋ฐฐ์ด์ ์กด์ฌํ์ง ์๋ ์ํฉ์๋ ์ฌ์ฉํ ์ ์๋ค. (ํ๊ฒ ๊ฐ์ด ๋ฐฐ์ด์์ ๋ช ๋ฒ์งธ๋ก ํฐ์ง ํ์ธํ๊ณ ๋ณ๊ฒฝํ๋ ์ํฉ ๋ฑ)
์ด ๋, ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด์ left <= right๋ก ์ค์ ํ๋ฉด ๋ฐฐ์ด์ ํ๊ฒ๊ฐ๊ณผ ๊ฐ์ ๊ฐ์ด ์กด์ฌํ์ง ์๋๋ผ๋ ๋ฐฐ์ด์ ๋ช ๋ฒ์งธ๋ก ํฐ ๊ฐ์ด ๋๋์ง ํ์ธํ ์ ์๋ค.

์๋ฅผ ๋ค์ด ์์๊ฐ์ ์ํฉ์ผ ๋ ํ๊ฒ ๊ฐ์ด 36์ด๋ผ๊ณ ํด๋ณด์.
์ค๊ฐ๊ฐ์ 34์ด์ง๋ง ํ๊ฒ ๊ฐ์ 36์ด๋ฏ๋ก ํ์ ๋ฒ์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ขํ์ผ ํ๋ค.
ํ์ฌ left, mid, right๊ฐ ๊ฐ์ ์ธ๋ฑ์ค์ธ ์ํฉ์์ left = mid + 1๋ก ๊ฐฑ์ ํ๊ฒ ๋๋ฉด left๊ฐ right๋ณด๋ค ์ค๋ฅธ์ชฝ์ ์กด์ฌํ๋ ์ํฉ์ด ๋๋ค.
์ด ๋ ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด left <= right ์์ false๋ฅผ ๋ฆฌํดํ๊ณ ์ด๋ ๋ฐฐ์ด์์ ์ฐพ์ ์ ์๋ ํ๊ฒ ๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ธ๋ฑ์ค์ ๋์ฐฉํ๋ค๋ ๋ป์ด ๋๋ค.
๊ณ ๋ก ํ์ฌ์ left์ธ๋ฑ์ค (ํ์ฌ ๊ฐ : 38) ๋ถ๋ถ์ 36์ ํ ๋นํ ์ ์๋ค.
โฐ ์๊ฐ๋ณต์ก๋
for๋ฌธ์ ์ฌ์ฉํด์ ๋ฐฐ์ด์ ์์๋ฅผ ๋น๊ตํ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ์ด์งํ์์ ๋น๊ตํด๋ณด์.
์ด ๋, ์ต์ ์ ์ํฉ์ ๊ณ ๋ คํ์ฌ ๋ฐฐ์ด ๋ง์ง๋ง ์ธ๋ฑ์ค์ ํ๊ฒ ๊ฐ์ด ์กด์ฌํ๋ค.

์ ํ ํ์์ ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ์ฐ์ฐ์ด ํ์ํ์ง๋ง ์ด์งํ์์ O(log N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋ฐฐ์ด์ ์ ๋ฐ์ผ๋ก ์ชผ๊ฐ๋ ์ฐ์ฐ์ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์
๋ฐฐ์ด์ ๊ธธ์ด N์ 2๋ก ๋ฌดํํ ๋๋์ด 1์ด ๋ ๋ ๊น์ง ๋ฐ๋ณตํ์ฌ log N์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
์ฝ๋ (Java)
for(int i=0;i<dp.length;i++){
for(int j=0;j<i;j++){
if(arr[j]<arr[i]){
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}