이진탐색의 개념은 간단하다.
what? 목적은 무엇인가
이진탐색의 궁극적 목적은 탐색! 즉 내가 원하는 타겟을 찾는 것이다.
why? 왜 쓰는가
그렇다면 어떻게 찾을 것인가?
완전탐색처럼 모든 요소를 돌아볼 수도 있겠지만, (시간복잡도 O(n)임)
정렬이 되어 있다면 그럴 필요가 없다!
숫자 맞추기 up & down 게임을 하는 것처럼
일단 중간을 찍고 범위를 반씩 줄여나가면 된다. (시간복잡도 logN임)
훨씬 빠르다 !
결국 이진탐색은 정렬이 되어있는 경우에
내가 원하는 타겟을 모두 순회하는 것보다 빠르게 찾을 수 있는 알고리즘이다.
결국 정렬된 상태에서 무언가를 찾기 위한 좋은 탐색 방법이라는 것!
plus !
내가 풀었던 이진탐색 문제 중에
이진탐색을 어떻게 써야할지 몰랐던 문제가 있는데,
대표적인 이진탐색 문제여서 소개하겠다.
백준 2805번 나무 자르기
상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다.
목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15, 10, 15가 될 것이고, 상근이는 길이가 5인 나무와 2인 나무를 들고 집에 갈 것이다. (총 7미터를 집에 들고 간다) 절단기에 설정할 수 있는 높이는 양의 정수 또는 0이다.
상근이는 환경에 매우 관심이 많기 때문에, 나무를 필요한 만큼만 집으로 가져가려고 한다. 이때, 적어도 M미터의 나무를 집에 가져가기 위해서 절단기에 설정할 수 있는 높이의 최댓값을 구하는 프로그램을 작성하시오.
이런 문제인데 ,,
이 문제가 이진탐색인 이유는
그림에서처럼 세로의 합의 관점에서 보면 정렬된 상태이기 때문에! -> 바로 이진탐색 사용 가능
정렬 되어있다는 걸 파악했다면 이진 탐색은 바로 사용 가능하다!
내가 이걸 이진탐색으로 받아들이지 않았던 이유는 이렇게 그림상에서처럼 세로의 합의 관점을 생각하지 못했고,
이것이 정렬 상태이기 때문에 바로 위와 같이 이진탐색을 사용할 수 있는데 그걸 떠올리지 못했음
'CS > 알고리즘' 카테고리의 다른 글
[카테부] 코테스터디 2주차 - N과 M(7) (백준 15656) (0) | 2024.08.13 |
---|---|
[카테부] 코테스터디 2주차 - N과 M(6) (백준 15655) (0) | 2024.08.13 |
[카테부] 코테스터디 2주차 - N과 M(5) (백준 15654) (0) | 2024.08.13 |
[카테부] 코테스터디 1주차 - 배열 합치기 (백준 11728) (0) | 2024.08.09 |
[카테부] 코테스터디 2주차 - 부분합 (백준 1806) (0) | 2024.08.07 |