[Leetcode] 278. First Bad Version โ
#์ด์งํ์
Problem โ
Leetcode algorithm study plan > ๋ฌธ์ ๋งํฌ
1๋ถํฐ N
๊น์ง์ ์ ์ค์์ ์ ๊ณต๋๋ isBadVersion
ํจ์๋ฅผ ํตํด ๊ฐ์ฅ ๋ฎ์ ์์์์ true
๊ฐ์ ์ฐพ๋ ๋ฌธ์ . O(log n)
์ผ๋ก
isBadVersion ํจ์
@param {Integer} @return {Boolean} @description ํ๋ผ๋ฉํ๊ฐ์ผ๋ก ๋๊ฒจ๋ฐ์ ๊ฐ์ด ์๋ชป๋ ๋ฒ์ ์ธ์ง ํ์ธํด์ฃผ๋ ํจ์๋ก. ์๋ชป๋ ๋ฒ์ ๋ณด๋ค ํฐ๊ฐ์ด ๋์ค๋ฉด ํญ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ฉํ๋ค.
Solution โ
O(log n)
์ผ๋ก ํ์ด์ผํ๋ ๋ฌธ์ ์ด๋ฏ๋ก ์ด์งํ์์ ์ด์ฉํ๋ค.
์ด์งํ์ ์กฐ๊ฑด์ค์ธ ๋ฐฐ์ด์ ์ ๋ ฌ์ํ๋ฅผ ํ์ธํ๋ค.
์ด์งํ์์ ๋ฐฐ์ด์ ๊ฐ์ด ๋๊ฐ๊ฐ ๋จ์์๋ mid๋ ํญ์ ์ผ์ชฝ์ ๋ฐ๋ผ๋ณด๊ฒ๋๋ค๋ ์กฐ๊ฑด์ ์ด์ฉํด์ ๋ฌดํ๋ฃจํ๊ฐ ๋์ง์๊ฒ ํ๊ฒ์ ์ค๋ฅธ์ชฝ์ธ๋ฑ์ค๋ก ๋ง์ถฐ์ ์กฐ๊ฑด์ ์ง๋ฉด๋๋ค
JS Code โ
/**
* 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 left = 1, right = n
while(left < right) {
let mid = Math.floor((left + right) / 2)
if (!isBadVersion(mid)) left = mid + 1
else right = mid
}
return right
};
};