1. ์ด์ง ํ์(Binary Search)์ด๋?
์ด์ง ํ์์ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ฐพ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ผ๋ก, O(log n) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ณต์ ์ผ๋ก ๊ฒ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ด๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ๋๋ค.
์๋ฅผ ๋ค์ด, 1๋ถํฐ 16๊น์ง์ ์ซ์ ์ค์์ ๋ชฉํ ์ซ์๋ฅผ ์ฐพ๋๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ๋จ์ ์ ํ ํ์(linear search)์ผ๋ก๋ ์ต์ ์ ๊ฒฝ์ฐ 16๋ฒ์ ๋น๊ต๊ฐ ํ์ํ์ง๋ง, ์ด์ง ํ์์ ์ฌ์ฉํ๋ฉด ์ต๋ 4๋ฒ์ ๋น๊ต๋ง์ผ๋ก ์ฐพ์ ์ ์๋ค.
2. O(log n) ์๊ฐ ๋ณต์ก๋์ ์ด์ง ํ์ ๊ตฌํ
JavaScript ์ฝ๋:
function binarySearch(A, x) {
let left = 0, right = A.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (A[mid] === x) return mid;
else if (A[mid] < x) left = mid + 1;
else right = mid - 1;
}
return -1;
}
์๊ฐ ๋ณต์ก๋: O(log n) (๊ฒ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ค์ด๋ฏ๋ก)
์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ๋์ํ๋ค:
- ๋ฐฐ์ด์ ์ค์๊ฐ์ ์ ํํ๋ค.
- ์ฐพ๋ ๊ฐ x๊ฐ ์ค์๊ฐ๋ณด๋ค ํฌ๋ฉด ์ค๋ฅธ์ชฝ ์ ๋ฐ์ ํ์ํ๊ณ , ์์ผ๋ฉด ์ผ์ชฝ ์ ๋ฐ์ ํ์ํ๋ค.
- ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ๊ฐ์ ์ฐพ๋๋ค.
3. ์ด์ง ํ์์ ํ์ฉํ ์ต์ ๊ฐ ์ฐพ๊ธฐ (Binary Search on the Result)
์ด์ง ํ์์ ๋จ์ํ ์ซ์ ๊ฒ์๋ฟ๋ง ์๋๋ผ ์ต์ ์ ๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์๋ ํ์ฉ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๊ธธ์ด๊ฐ n์ธ ์ง๋ถ์ 0๊ณผ 1๋ก ํ์๋ ๊ตฌ๋ฉ์ด ์๊ณ , k ๊ฐ์ ๋์ผํ ํฌ๊ธฐ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ตฌ๋ฉ์ ๋ฎ์ด์ผ ํ๋ ๋ฌธ์ ๋ฅผ ์๊ฐํด ๋ณด์. ์ด๋, ํ์์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
JavaScript ์ฝ๋:
function boards(A, k) {
let n = A.length;
let left = 1, right = n, result = -1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (check(A, mid) <= k) {
right = mid - 1;
result = mid;
} else {
left = mid + 1;
}
}
return result;
}
์ด ์ฝ๋๋ check(A, mid) ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ํฌ๊ธฐ์ ํ์๋ก ๋ชจ๋ ๊ตฌ๋ฉ์ ๋ฎ์ ์ ์๋์ง ๊ฒ์ฌํ๋ค. ๋ฒ์๋ฅผ ์ขํ๊ฐ๋ฉฐ ์ต์ ์ ํฌ๊ธฐ๋ฅผ ์ฐพ๋ ๋ฐฉ์์ด๋ค.
4. ํ์๊ฐ ์ถฉ๋ถํ์ง ํ์ธํ๋ ํจ์ (Greedy Check)
์ด์ , ํน์ ํฌ๊ธฐ์ ํ์๋ก ๋ชจ๋ ๊ตฌ๋ฉ์ ๋ฎ์ ์ ์๋์ง ํ์ธํ๋ ํจ์๋ฅผ ๊ตฌํํด ๋ณด์.
JavaScript ์ฝ๋:
function check(A, k) {
let n = A.length;
let boards = 0, last = -1;
for (let i = 0; i < n; i++) {
if (A[i] === 1 && last < i) {
boards++;
last = i + k - 1;
}
}
return boards;
}
์๊ฐ ๋ณต์ก๋: O(n) (๋ฐฐ์ด์ ํ ๋ฒ ์ํํ๋ฉฐ ํ์ํ ํ์ ๊ฐ์๋ฅผ ๊ณ์ฐ)
์ด ํจ์๋ ๋ฐฐ์ด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ํ๋ฉด์, ์์ง ๋ฎ์ด์ง ์์ ๊ตฌ๋ฉ์ด ๋์ค๋ฉด ์๋ก์ด ํ์๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
5. ์ด์ง ํ์์ ํ์ฉํ ์ต์ ํ ๋ฌธ์ ํด๊ฒฐ ํจํด
์ด์ง ํ์์ ๋จ์ํ ๊ฐ ๊ฒ์ ์ธ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ ์ฉํ๋ค:
- ์ต์ ์ ํฌ๊ธฐ ์ฐพ๊ธฐ (์: ์์ ์ง๋ถ ๊ตฌ๋ฉ ๋ฌธ์ )
- ์ต์/์ต๋ ๋น์ฉ ๊ณ์ฐ (์: ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต์ ๋น์ฉ ์ฐพ๊ธฐ)
- ์๊ฐ ์ต์ ํ (์: ๊ฐ์ฅ ์งง์ ์๊ฐ ๋ด์ ์์ ์ ์๋ฃํ๋ ๋ฐฉ๋ฒ ์ฐพ๊ธฐ)
์ด๋ฌํ ๋ฌธ์ ๋ค์ ๋ณดํต ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต์/์ต๋ ๊ฐ์ ์ฐพ๋ ํํ ๋ก ๋ณํํ์ฌ ์ด์ง ํ์์ ์ ์ฉํ ์ ์๋ค.
๋๊ธ