풀이1
public func solution(_ A : inout [Int]) -> Int {
let maximumNumber = A.max() ?? 0
if maximumNumber <= 0 {
return 1
}
return Set<Int>(1...maximumNumber+1).subtracting(A).min() ?? 1
}
주어진 배열 내에 가장 큰 수를 찾는다.
만약 가장 큰 수가 0보다 작다면 1을 반환한다.
만약 0보다 크다면 1부터 방금 전 찾은 가장 큰 수에 1을 더한 값까지의 Set을 생성하고, 그로부터 A를 차집합한다. 그리고 그 중에 가장 작은 숫자를 반환한다.
풀이2
public func solution(_ A : inout [Int]) -> Int {
var setB = Set<Int>()
for item in A where item > 0 {
setB.insert(item)
}
if setB.isEmpty {
return 1
}
for i in 1...setB.count+1 where !setB.contains(i) {
return i
}
return -1
}
배열을 순회하여 Set에 양수를 담는다.
이후 Set이 비어있으면 양수가 없는 것이므로 1을 반환한다.
1부터 Set의 크기에 1을 더한 값까지의 범위를 순회하면서 해당 값이 Set에 없는 경우 반환한다.
풀이에 참고한 내용: https://jusung.github.io/Codility-Lesson4(Counting-Elements)-MissingInteger/