Missing Number - LeetCode

Solution

class Solution {
    func missingNumber(_ nums: [Int]) -> Int {
        // 1.
        let max: Int? = nums.max()
        let min: Int? = nums.min()
        if min! != 0 {
            return 0
        }
        
        // 2.
        var array2: Array<Int> = []
        for i in min! ... max! {
            array2.append(i)
        }

        
        // 3.
        var nums2 = nums
        nums2.sort()
        array2.sort()
        for i in array2 {
            if i != nums2[i] {
                return i
            }
        }
        return max! + 1
        
        // // ๐Ÿ”ฅ.
        // for i in min! ... max! {
        //     if nums.contains(i) == false {
        //         return i
        //     }
        // }
        // return max! + 1
    }
}

// TACTIC
// 1. Find the maximum and minimum numbers in the 'nums' array.
//      - Use array.max() and array.min() methods.
//      - If 'min' is not equal to 0, return 0.
// 2. make array2
//      - array2์— for๋ฌธ๊ณผ append๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ’๋“ค์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
// 3. Compare 'nums' and 'array2', and return the missing number.
//      - nums์™€ array2๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
//      - for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ตํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅด๋ฉด, ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅ
// ๐Ÿ”ฅ. array๋ฅผ ๋งŒ๋“ค์ง€ ๋ง๊ณ  ๋ฐ”๋กœ ๋น„๊ตํ•ด๋ณด์ž -> runtime์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฐ๋‹ค.

// POINT
// 1. Optinal Type:
// Swift์˜ max() ํ•จ์ˆ˜๋Š” Optional ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž…๋ ฅ๋œ ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
// ๋งŒ์•ฝ ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋‹ค๋ฉด max() ํ•จ์ˆ˜๋Š” nil์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
// ๋”ฐ๋ผ์„œ max()๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋Š” ์ž๋™์œผ๋กœ Optional ํƒ€์ž…์ด ๋ฉ๋‹ˆ๋‹ค.