FirstBadVersion
Published at 2021-11-08
# The isBadVersion API is already defined for you.
# @param version, an integer
# @return an integer
# def isBadVersion(version):
class Solution:
def firstBadVersion(self, n):
"""
:type n: int
:rtype: int
"""
left = 1
right = n - 1
while left <= right:
mid = left + (right - left) // 2 # 앞에 left를 더하는건 그래야 절반의 절반 갈때 그 위치로 가기 가능
if isBadVersion(mid):
right = mid - 1 # 이보다 앞에 bad가 있을 수 있으니 ㄱㄱ
else:
left = mid + 1
return left
# binary Search 이용. 절반 확인해서 걔보다 큰지 작은지. 그래서 절반을 다시 갱신. 이걸 찾을때까지 /**
* Definition for isBadVersion()
*
* @param {integer} version number
* @return {boolean} whether the version is bad
* isBadVersion = function(version) {
* ...
* };
*/
/**
* @param {function} isBadVersion()
* @return {function}
*/
var solution = function (isBadVersion) {
/**
* @param {integer} n Total versions
* @return {integer} The first bad version
*/
return function (n) {
let start = 0;
let end = n;
while (start <= end) {
const mid = Math.floor((start + end) / 2);
if (isBadVersion(mid)) end = mid - 1;
else start = mid + 1;
}
return start;
};
};
/*
[이진 탐색]
1. 절반을 확인하고
1-1. 불량임? 걔가 첫 불량품인지 확인하기 위해 앞에꺼 검사. 1번으로 돌아감
1-2. 불량 아님? 그럼 그 뒤쪽에 있단 뜻이니 다음 절반을 검사 ㄱㄱ. 1번으로
*/