Codility Lesson 3-3: TapeEquilibrium

yoogail·2022년 5월 15일
0

Algorithm

목록 보기
11/12
post-thumbnail

Codility Lesson 3-3: TapeEquilibrium

Solution1

  • N counters, set 0 => 0,0,0,0,0,,,N개
  • encrease(X): X가 1 증가
  • max counter: 모든 카운터가 카운터의 최대값으로 설정
public func solution(_ N : Int, _ A : inout [Int]) -> [Int] {
    var array = Array(repeating: 0, count: N)
    var maxValue = 0
    
    for (_, value) in A.enumerated() {
        if value <= N {
            array[value-1] += 1
            maxValue = array[value-1] > maxValue ? array[value-1] : maxValue
        } else {
            array = Array(repeating: maxValue, count: N)
        }
    }
    return array
}

결과



Solution2

  • N+1 값이 들어왔을 때 그때마다 모든 값을 초기화 시켜 주지 말고, 최저 값 지정을 통해서 시간을 줄인다.
public func solution43(_ N : Int, _ A : inout [Int]) -> [Int] {
    var array = Array(repeating: 0, count: N)
    var maxValue = 0
    var minValue = 0
    
    for (_, value) in A.enumerated() {
        //print(value, array)
        if value <= N {
            if array[value-1] < minValue {
             array[value-1] = minValue + 1
            } else {
            array[value-1] += 1
            }
            maxValue = array[value-1] > maxValue ? array[value-1] : maxValue
        } else {
            minValue = maxValue
        }
    }
    array = array.map ({ $0 < minValue ? minValue : $0 })
    return array
}

결과

🔖 문제 출처

profile
🍫 iOS 🍫 Swift

0개의 댓글