전체 글94 Swift로 그래프 탐색 알고리즘을 실전 문제에 적용해보기 - BFS 편 그래프 탐색 알고리즘에 대한 이해가 선행되어야 한다. 그래프와 DFS/BFS의 개념을 모른다면 여기를 추천한다. Depth-First Search (DFS) - 저번 시간에 한 것📍 - 깊이 우선 탐색 - 이번 포스팅에서는 weigh을 가지지 않는 방향 그래프에서 모든 경우를 구해볼 때 이 DFS를 사용할 것이다. 예를 들면 1부터 N까지의 자연수 중 n개의 집합을 만들 수 있을 때, 가능한 모든 순열을 구해야 할 때 사용할 수 있다. - 스택을 통해 구현한다. 즉, 재귀함수를 통해 구현할 것이다. (함수가 호출되면 스택 영역에 쌓이게 된다. 함수가 무한호출될 때 Stack Overflow 가 발생하는 것도 여기서 기인하는 것.) Breadth-First Search (BFS) - 이번 시간에 할 것📍 .. 2020. 1. 10. Swift로 그래프 탐색 알고리즘을 실전 문제에 적용해보기 - DFS 편 그래프 탐색 알고리즘에 대한 이해가 선행되어야 한다. 그래프와 DFS/BFS의 개념을 모른다면 여기를 추천한다. Depth-First Search (DFS) - 이번 시간에 할 것📍 - 깊이 우선 탐색 - 이번 포스팅에서는 weigh을 가지지 않는 방향 그래프에서 모든 경우를 구해볼 때 이 DFS를 사용할 것이다. 예를 들면 1부터 N까지의 자연수 중 n개의 집합을 만들 수 있을 때, 가능한 모든 순열을 구해야 할 때 사용할 수 있다. - 스택을 통해 구현한다. 즉, 재귀함수를 통해 구현할 것이다. (함수가 호출되면 스택 영역에 쌓이게 된다. 함수가 무한호출될 때 Stack Overflow 가 발생하는 것도 여기서 기인하는 것.) Breadth-First Search (BFS) - 다음 시간에 할 것📍 .. 2020. 1. 7. Swift로 작성해보는 기본 자료구조 - Stack, Queue Swift로 작성하는 Stack struct Stack { var isEmpty: Bool { return self.list.isEmpty } var top: T? { return self.list.last } mutating func push(_ item: T) { self.list.append(item) } mutating func pop() -> T? { return self.list.popLast() } private var list = [T]() } Swift로 간단히 작성해본 Stack이다. 특별히 어려운 부분은 없으며 포인트가 되는 부분은 다음 두 가지다. 1. 제네럴한 아이템을 관리할 수 있도록 제너럴 를 사용하였다. 2. 값 타입인 Struct로 작성했기 때문에 push 와 pop 함수에.. 2020. 1. 6. 프로토콜 확장으로 기능을 추가하기 존 호프만의 Protocol-Oriented Programming with Swift(스위프트 프로토콜지향 프로그래밍) 5장 읽으며 메모 (요약글 아님) 프로토콜 확장의 이점 (기능을 추가로 지원해주는 관점에서, 서브클래싱으로 그것을 이루었을 때와 비교했을 때) 클래스를 서브클래싱하여 그곳에 원하는 기능을 더했을 때의 한계: 원본 클래스에는 실제 기능을 추가하지 않으므로, 그 기능이 필요한 부분에서는 원본 클래스의 모든 인스턴스를 새로운 서브클래스의 인스턴스로 변경해야 한다. 프로토콜 확장의 경우, 해당 프로토콜을 따르기만 하면 그 기능을 제공할 수 있기 때문에 이런 치환 작업 없이 자동으로 확장한 함수/프로퍼티를 이용할 수 있다. 물론, 서브클래싱은 참조 타입(클래스 등)만 가능하고 값 타입(구조체, .. 2020. 1. 1. 프로토콜 컴포지션이 클래스 상속 구조보다 유용한 경우를 설명하기 좋은 예제 존 호프만의 Protocol-Oriented Programming with Swift(스위프트 프로토콜지향 프로그래밍) 4장 읽으며 메모 (요약글 아님) 객체지향에서 프로토콜 컴포지션이 클래스 상속 구조보다 유용한 케이스를 설명하기 적합한 예시가 책에 나와있어서 나중에 써먹으려고 메모. 되게 많을 것 같지만 생각보다 확 와닿고 쉬운 예제가 금방 떠오르지가 않는다. 그럴 때 이 예시를 들면 좋을 것 같다. 클래스 - 한 번에 하나의 부모만 상속이 가능함. (실제 세계에서, 나를 낳아준 부모가 중복이 될 수 없는 것처럼) 프로토콜 컴포지션 - 여러 개의 작은 프로토콜들을 채용하여 내가 필요한 것만 선별적으로 취할 수 있다. 따라서 비대한 슈퍼클래스의 생성 / 서브클래스가 쓸데없는 기능까지 다 안고 있을 필요.. 2019. 12. 30. Swift의 Array가 멀티쓰레드에서 안전하지 않은데 어떻게 하면 될까요? (Stack Overflow) 원문 Adding items to Swift array across multiple threads causing issues (because arrays aren't thread safe) - how do I get around that? 뜻을 이해하기 쉽도록 의역/추가설명을 붙인 부분들이 있습니다. Question Swift 멀티 쓰레드 환경에서 Array에 아이템을 추가하려고 했더니 이슈가 발생했습니다(Array가 쓰레드에 안전하지 않음). 어떻게 하면 될까요? 저는 블럭을 저장하는 Array를 만들고, 요청을 받았을 때 그 Array 안의 블럭을 전부 실행시켜주고 싶었습니다. 그래서 다음과 유사한 코드를 작성했습니다. class MyArrayBlockClass { private var blocksA.. 2019. 12. 30. 이전 1 2 3 4 5 6 ··· 16 다음