Skip to content

[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 โ€‹

javascript
/**
 * 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
    };
};