-
[Algorithm] ์ด์งํ์(Binary Search)๐ปProgramming/Algorithm 2024. 4. 9. 15:15
์ด์งํ์์ด๋?
"์ ๋ ฌ๋์ด ์๋ ๋ฐ์ดํฐ"์์ ํน์ ํ ๊ฐ์ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ฌธ์
์์์ N๊ฐ์ ์ซ์๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋๋ค. N๊ฐ์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ค์ N๊ฐ์ ์ ์ค ํ ๊ฐ์ ์์ธ M์ด ์ฃผ์ด์ง๋ฉด
์ด๋ถ๊ฒ์์ผ๋ก M์ด ์ ๋ ฌ๋ ์ํ์์ ๋ช ๋ฒ์งธ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์. ๋จ ์ค๋ณต๊ฐ์ ์กด์ฌํ์ง ์์ต๋๋ค.์ ๋ ฅ
์ฒซ ์ค์ ํ ์ค์ ์์ฐ์ N(3<=N<=1,000,000)๊ณผ M์ด ์ฃผ์ด์ง๋๋ค.
๋ ๋ฒ์งธ ์ค์ N๊ฐ์ ์๊ฐ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค.์ถ๋ ฅ
์ฒซ ์ค์ ์ ๋ ฌ ํ M์ ๊ฐ์ ์์น ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์ด์งํ์์ ๊ณผ์
1. ์ผ๋จ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค. (์ค๋ฆ์ฐจ์์ผ๋ก)
2. ๋ต์ด ๋ ์ ์๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ฒ์๋ฅผ ๊ตฌํ๋ค. (์์ ๋ฌธ์ ์์๋ ์ต์๊ฐ์ด ๊ฐ์ฅ ์์ ์ธ๋ฑ์ค๊ฐ ๋๊ณ , ์ต๋๊ฐ์ด ๊ฐ์ฅ ํฐ ์ธ๋ฑ์ค๊ฐ ๋ ๊ฒ์ด๋ค.)
3. ๊ทธ๋ฆฌ๊ณ (์ต์๊ฐ + ์ต๋๊ฐ) / 2 ์ ์ค๊ฐ๊ฐ์ ๋ง๋ ๋ค. ๋ง์ฝ ์ด ์ค๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ด M๋ณด๋ค ํฌ๋ค๋ฉด ์ต๋๊ฐ์ ์ด ์ค๊ฐ๊ฐ - 1์ผ๋ก ๋ฐ๊พผ๋ค.
๋, ๋ง์ฝ ์ค๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ด M๋ณด๋ค ์๋ค๋ฉด, ์ต์๊ฐ์ ์ค๊ฐ๊ฐ + 1๋ก ๋ฐ๊พผ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ต์๊ฐ์ด ์ต๋๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋์๋ง ๊ณ์ ๋ฐ๋ณตํ๋ค.
๊ตฌํ ์ฝ๋
import java.util.Arrays; import java.util.Scanner; public class Section6_8_MyVer { int solution(int n, int m, int[] list) { int low = 0; int high = n - 1; int mid = (low + high) / 2; Arrays.sort(list); while (low <= high) { mid = (low + high) / 2; if (list[mid] > m) high = mid - 1; else if (list[mid] == m) break; else low = mid + 1; } return mid + 1; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Section6_8_MyVer T = new Section6_8_MyVer(); int n = scanner.nextInt(); int m = scanner.nextInt(); int[] list = new int[n]; for (int i = 0; i < n; i++) list[i] = scanner.nextInt(); System.out.println(T.solution(n, m, list)); } }
์ด์งํ์์ ์๊ฐ๋ณต์ก๋
O(logn)
๋ฐฐ์ด์ ํฌ๊ธฐ์ ๋นํ์ฌ ์คํ ์๊ฐ์ด ๋น ๋ฅด๋ค. -> ๋์ฉ๋ ๋ฐ์ดํฐ์์ ํน์ ๊ฐ์ ์์น๋ฅผ ์ฐพ๋ ๋ฐ ์ฉ์ดํ๋ค.
'๐ปProgramming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] BFS, DFS (with Python) (0) 2024.06.28 [Algorithm] ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ํผ๋ณด๋์น ์์ด ๊ตฌํ (0) 2024.04.11 [Algorithm] ์ฝ์ ์ ๋ ฌ(Insertion Sort) (0) 2024.03.28 [Algorithm] ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort) (0) 2024.03.27 [Algorithm] ์ ํ์ ๋ ฌ(Selection Sort) (0) 2024.03.26