[코딜리티] 레슨 3 - PermMissingElem (Swift)

devapploper·2024년 8월 11일
public func solution(_ A : inout [Int]) -> Int {
    var sum = 0
    
    for number in 1...A.count+1 {
        sum += number
    }
    
    for number in A {
        sum -= number
    }

    return sum
}

N개의 숫자가 1과 N+1 사이에 있고 한 숫자가 빠져있으면, 이 숫자는 1과 N+1 사이의 모든 숫자를 더한 값으로 부터 배열에 있는 숫자를 뺀 나머지일 것이다.

1부터 N까지 더한 값은 N*(N+1) / 2 이므로, 이 공식을 이용하면 첫째 for-loop을 간소화할 수 있다.

따라서 위 공식을 이용하여 최적화한 풀이는 다음과 같다.

public func solution(_ A : inout [Int]) -> Int {
	let n = A.count+1
	let sum = n*(n+1) / 2
    let sumA = A.reduce(0, +)
    return sum - sumA
}
profile
iOS, 알고리즘, 컴퓨터공학에 관련 포스트를 정리해봅니다

0개의 댓글