BinarySearch 의 패턴화
패턴화? -> 어떤 Template(패턴)을 만들어서 binarySearch 로직이 필요한 모든 문제들에 이 패턴을 적용하자. 아래 1,2,3 부분과 right, left 가 어떻게 할당되는지, while 에 left < right 에서 equal 은 빠지는 포인트 등을 기억해두고, 템플릿화 하자. left, right 의 값은 답이 될 수 있는 범위를 포함한다! 즉, 답이 n 이 될 수 있으면, right = n으로 선언해준다. isBadVersion 은 조건을 의미한다. 즉, condition이다. return 해주는 left 는 2번 조건(condition)을 만족하는 가장 작은 값을 말한다 문제에서 1~n 의 넘버에서 최초로 불량이 나오는 k 값을 찾는 것인데, 이때 left를 리턴해주면 된다.
leetcode 887 superEggDrop
class Solution { public int superEggDrop(int k, int n) { // dp(K,N): max # of moves needed to solve the problem. // // dp(K,N) = 1 + (1 dp(N,K) 의 정의 자체가 정확한 낙하한계지점을 알기 위한 최대 낙하 횟수이고, 우리가 설정한 x에 따라 다음 스텝은 dp(k-1, x-1) 과 dp(k, n-x) 로 쪼개지는데, 이 둘 중에 최대값을 고려해야만, dp(n,k) 값이 최대가 되기 때문이다. // 근데, 각각의 dp(n-1, x-1), dp(k, n-x) 의 최대값 pair 중에 가장 작은 값이 dp(k,n)이 된다. // 이유는, x 라는 초기에 우리가 pick하는 낙하지점의 변수가 변할때, 가..