처음에 문제를 보고 for문
을 통해서 stones값을 -1씩 반복 및 접근해서 *조건
을 따진다면 시간복잡도가 당연히 통과하지 못할 것이라고 생각했다.
그래서 고안한 방법은 stones의 값 중 0이 아닌 최솟값
을 찾아서 최솟값
만큼 빼주면 되지 않을까 라고 생각했다.
하지만 최솟값을 구하기 위해서는 역시 stones를 (max:20000)만큼 반복 순회하여야 했다.
이때 Math.min()함수를 사용했는데 매개변수로 20000개의 원소가 입력되면 런타임 에러가 뜬다.
- 문제 풀이의 핵심 접근은 임의의 값을 stones의 모든 값에서 감소시킨 후 *
조건
을 따져주는 방식으로 푸는 것이다.- 여기서 반복문을 사용해서 임의의 값을 정한다면 (max: 200,000,000) 당연히 시간복잡도를 만족 할 수 없다.
- 따라서 이진탐색 O(log N)을 통해서 문제를 해결하는 생각이 떠오른다. (min = 1, max = 200,000,000)
*조건
: stones에서 중복되는 0이 k >= 0 인가