본문 바로가기
알고리즘

[Swift] find Two Missing Numbers

by 고고 2022. 1. 11.

파이썬과 함께하는 자료구조의 이해 연습문제 2장 20번

 

1. a+b 구하기

2. ab 구하기

3. a-b 구하기

 

4. a와 b 구하기

import Foundation

class Solution {
    func missingTwoNumber(_ nums: [Int]) -> [Int] {
        let numsCount = nums.count
        
        let currentSum = (numsCount + 1) * (numsCount + 2) / 2
        let numsSum = nums.reduce(0, +)
        
        let ABSum = currentSum - numsSum // a + b
        
        var BMultiple = 1
        for i in nums {
            if i == 0 { continue }
            BMultiple *= i
        }
        
        let ABMultiple = (1...nums.count + 1).reduce(1, *) / BMultiple // ab
        
        //(a-b)^2 = (a+b)^2-4ab
        let square = abs(ABSum * ABSum - 4 * ABMultiple)
        let diff = Int(sqrt(Double(square)))
       
        
        // a + b = 10
        // a - b = 2
        // 2a = 12 , a = 6
        
        let a = (ABSum + diff) / 2
        let b = ABSum - a
        
        return [b, a]
    }
}

Solution().missingTwoNumber([0,1]) // 2, 3
Solution().missingTwoNumber([1,2,3,5,7,8,9,0]) // 4, 6


참고 출처 : https://algorithms.tutorialhorizon.com/algorithms-find-two-missing-numbers-in-a-sequence-of-consecutive-numbers/

 

Find two Missing Numbers in Sequence of Consecutive Numbers | TutorialHorizon

Algorithms – Find two Missing Numbers in a Sequence of Consecutive Numbers

algorithms.tutorialhorizon.com

 

댓글