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
}
'TIL' 카테고리의 다른 글
[240330] 이중배열과 enumerated/contains(where:) (0) | 2024.03.31 |
---|---|
[240329] index(_:offsetBy:)/contains()/isSubset(of:)/이중배열 enumerated() (0) | 2024.03.29 |
[240321] 시뮬레이터 화면 안뜸/동적, 정적타입 (0) | 2024.03.21 |
[240320] Segue/Navigation Controller/didSelectRowAt/스와이프 (0) | 2024.03.20 |
[240319] 배열과 딕셔너리 (0) | 2024.03.19 |