본문 바로가기
TIL

[240328] ArraySlice

by 줍 2024. 3. 28.

1. 햄버거 문제. 몇몇 케이스에서 시간초과가 났는데 그 이유는 ArraySlice 때문이었다. 

suffix를 사용해 배열에 접근하면 새 배열이 생성되는 것이 아니라 기존 배열과 강한 참조관계에 놓이는데, 이렇게 참조관계에 있을 때는 힙 영역을 사용하기 때문에 속도가 느려지는 문제가 생긴다. 또한 강한 참조를 유지하기 때문에 메모리 누수 가능성이 있다.

그러므로 배열을 참조하는 ArraySlice를 그대로 사용하기 보다는

1) Array로 형변환하거나

2) 새 변수에 값을 저장하여

강한 참조 사이클 문제가 일어나지 않도록 해주어야한다.

func solution(_ ingredient:[Int]) -> Int {
    var stack = [Int]()
    var answer = 0

    for i in ingredient {
        stack.append(i)
        if Array(stack.suffix(4)) == [1, 2, 3, 1] {   // 이 부분!
            stack.removeLast(4)
            answer += 1
        }
    }
    return answer
}