본문 바로가기

swift32

[알고리즘 / Swift] 힙 Heap Heap 이란? 데이터에서 최댓값 최솟값을 빠르게 찾기 위해 고안된 완전 이진트리로 우선순위 큐를 위해 만들어진 자료구조 최대힙(max heap) : 부모노드 ≥ 자식노드 최소힙(min heap) : 부모노드 ≤ 자식노드 💡 완전 이진 트리란? 이진트리 = 자식 노드가 최대 두 개인 트리 완전 이진트리 = 마지막 레벨을 제외한 모든 노드가 2개씩 채워져 있으며, 최하단 레벨 또한 좌측부터 채워져있는 노드를 의미한다. 즉 완전 이진트리는 왼쪽부터 자식 노드를 차례로 채운다. index 성질 heap은 완전 이진 트리 구조이기 때문에 노드 간 인덱스 관계를 나타낼 수 있다. → 완전 이진트리는 무조건 왼쪽부터 채워지기 때문에 채워지는 순서가 있음 = index 부모 노드 index = 자식 노드 index .. 2024. 3. 13.
[Swift] for 문 거꾸로 순회(stride), reverse VS reversed 알고리즘 문제를 풀다 보면 반복문을 반대로 돌려야 할 때가 종종 등장한다. 파이썬의 경우 for 문 안에 같이 적는 range에 step이 존재하여 큰 수부터 작은 수까지 step을 -1씩 하면 거꾸로 순회가 가능했다. 이와 같은 문법이 swift에서는 어떻게 작성해야하는지 찾아보았다. 또한 배열을 거꾸로 순회하는 경우에는 reversed() 함수를 사용해 뒤집으면 되는데 공식 문서를 읽어보던 중 reversed()와 reverse() 두가지 함수의 재밌는 차이점을 발견하여 같이 정리해볼까 한다. 연속되는 범위 거꾸로 순회하기 파이썬의 range의 step과 같은 역할을 해주는 swift 함수는 stride()이다. stride(from:to:by:) to를 포함하지 않음 stride(from:throu.. 2024. 3. 11.
배열 Safe Index - 안전하게 배열 조회하기 배열은 인덱스를 통해 빠른 접근이 가능하다. 하지만 인덱스 범위를 넘게 되면 런타임 에러가 발생해 앱을 강제 종료 시킬 수 있어 치명적이다. 프로젝트 진행 중 인덱스를 접근할 일이 많았고, 이는 위험성을 가지고 있기 때문에 멘토님께서 safe Index를 사용하는 방법을 권유하셨다. 따라서 앱에서 인덱스를 통한 접근이 필요할 시 subscript를 사용하여 안전하게 접근할 수 있는 방법을 간단하게 정리해 보겠다. extension Array { subscript (safe index: Int) -> Element? { return indices ~= index ? self[index] : nil } } indices는 Collection 타입의 유효범위를 나타낸다. 예를 들어 arr = [1,2,3] 일.. 2024. 2. 29.
Struct VS Class 메모리 관점 고찰과 언제 써야할까? Struct VS Class 성능 비교 메모리 저장 Swift의 struct와 class의 차이는 메모리의 여러 영역 중 Stack과 Heap에 관련되어 있다. struct → Stack 할당 (정적 할당 : 컴파일 시 크기 결정) class → Heap 할당 (동적 할당 : 런타임 시 동적으로 할당됨) Stack은 정적 타입으로 간단한 자료구조 형태를 가지며 O(1)의 시간복잡도를 가지고 간단하게 할당 해제할 수 있는 반면에 Heap은 메모리에 연속적으로 존재하지 않아 복잡한 과정을 거쳐 할당 해제 시 비용이 스택보다 더 크다. Dispatch https://bang-tori.tistory.com/77 접근제한자 정리 및 성능 향상 이유 + final 제한자 프로젝트를 진행할 당시 적절한 접근제한자를 .. 2024. 2. 28.