PermCheck coding task - Learn to Code - Codility


요약

56 → 100

  1. Array → Set은 쉽게 가능하다. Set(Array<>)
  2. .max(), .min(), .count는 각각 메서드, 메서드, 프로퍼티라는 것을 기억하자.
  3. 최대 1,000,000,000 크기의 배열을 O(n)으로 탐색하는 것은, 시간 초과가 발생하지 않았음을 기억하자.

접근

// permutation이 성립하는 경우 1, 그렇지 않은 경우 0 return
// A 배열의 길이는 1,000,000,000이다. O(N)이 가능할까 ?
// 쉬운 접근은 Set을 활용하는 것이다.
// 배열을 탐색하며 Set에 추가하고, Set.count == N을 출력하면 된다.

// 또 다른 힌트는 permutation의 정의가, 1...N의 범위가 한 번씩만 등장한다는 것이다.
// 따라서 A의 크기가 N과 다른 경우 return 0이다.
// else N과 같다면, Set(A)의 크기까지 N과 같은 경우 return 1이다.

// 다행히 Array를 Set으로 쉽게 바꿀 수 있다. Set(Array)

나의 풀이

import Foundation
import Glibc

public func solution(_ A : inout [Int]) -> Int {
    let setA = Set(A)
    let maxValueOfA = A.max()
    let sizeOfA = A.count
    let sizeOfSetA = setA.count

    guard sizeOfA == maxValueOfA else { return 0 }
    guard sizeOfSetA == maxValueOfA else { return 0 }

    return 1
}

+ Recent posts