본문 바로가기

DFS (Depth-First Search) BFS (Breadth-First Search) 개념 이 포스트는 SwiftAlgorithmClub DFS, BFS 내용을 정리한 글입니다. DSF (Depth-First Search) DFS 코드에서 확인할 수 있습니다. 깊이 우선 검색 (DFS)은 트리 또는 그래프 데이터 구조를 탐색하거나 검색하기위한 알고리즘입니다. 소스 노드에서 시작하여 가장 깊은 단계까지 추적합니다. 깊이 우선 검색은 유 방향 그래프와 무향 그래프 모두에 사용할 수 있습니다. 위에 탐색하는 과정을 그림으로 표현하면 아래와 같습니다. A -> B -> D -> B 로 다시 돌아가면서 이미 방문한 적이 있다면 다른 간선 E 로 탐색을 합니다. DFS 코드에서 확인할 수 있습니다. let graph = Graph() let node0 = graph.addNode("0") let node.. 더보기
코드스피츠 2강 오브젝트 - 6회차 (Final) 책 오브젝트를 기반으로 하는 코드스피츠 강의 오브젝트2 - 6회차 를 정리한 내용입니다. 1. 코드스피츠 2강 오브젝트 - 1회차 2. 코드스피츠 2강 오브젝트 - 2회차(1) 3.코드스피츠 2강 오브젝트 - 2회차(2) 4.코드스피츠 2강 오브젝트 - 3회차 5.코드스피츠 2강 오브젝트 - 4회차 6.코드스피츠 2강 오브젝트 - 5회차 7.코드스피츠 2강 오브젝트 - 6회차 (Final) Testing 설계가 잘못되었다고 생각되어서 고쳤더니 고친 설계가 잘된건지 어떻게 알까? 고친 설계를 올바르다는 확신하는 Testing 도구가 필요하다. UnitTest 알고리즘 로직의 단위 테스트를 검증한다. 예) CenterLayoutArrangerTest.swift 화면 정 가운데에 정상적으로 배치하는지 검증한다.. 더보기
코드스피츠 2강 오브젝트 - 5회차 책 오브젝트를 기반으로 하는 코드스피츠 강의 오브젝트2 - 5회차 를 정리한 내용입니다. 1. 코드스피츠 2강 오브젝트 - 1회차 2. 코드스피츠 2강 오브젝트 - 2회차(1) 3.코드스피츠 2강 오브젝트 - 2회차(2) 4.코드스피츠 2강 오브젝트 - 3회차 5.코드스피츠 2강 오브젝트 - 4회차 6.코드스피츠 2강 오브젝트 - 5회차 7.코드스피츠 2강 오브젝트 - 6회차 (Final) 이전 강의 요약 Visitor 는 제어를 뺏고 행위만 남겨두는 것 Renderer 가 모든 제어를 가져가고 Visitor 는 행위만 공급하는 것 Framework 의 첫번째 단계인 제어를 역전 시키는 DI 하는데 성공했다. Visitor, Composite 를 사용하면 제어 역전을 통해서 제어 구문을 분리해낼 수 있다.. 더보기
코드스피츠 2강 오브젝트 - 3회차 책 오브젝트 14장를 기반으로 하는 코드스피츠 강의 오브젝트2 - 3회차 를 정리한 내용입니다. 1. 코드스피츠 2강 오브젝트 - 1회차 2. 코드스피츠 2강 오브젝트 - 2회차(1) 3.코드스피츠 2강 오브젝트 - 2회차(2) 4.코드스피츠 2강 오브젝트 - 3회차 5.코드스피츠 2강 오브젝트 - 4회차 6.코드스피츠 2강 오브젝트 - 5회차 7.코드스피츠 2강 오브젝트 - 6회차 (Final) 이 포스트는 Java 예제를 Swift 예제로 바꿔서 다루고 있습니다. 설계의 일관성 알고리즘: 어떠한 문제는 변수와 제어를 통해서 순차적으로 처리해 나가는 과정 설계: 알고리즘 코드를 적절하게 배치하는 것 알고리즘이 다양한 형태를 가짐에도 불구하고 일관성있게 배치가 되었다는 뜻이다. 왜 코드를 일관성있게 짜야.. 더보기
코드스피츠 2강 오브젝트 - 4회차 책 오브젝트 14장를 기반으로 하는 코드스피츠 강의 오브젝트2 - 4회차 를 정리한 내용입니다. 1. 코드스피츠 2강 오브젝트 - 1회차 2. 코드스피츠 2강 오브젝트 - 2회차(1) 3.코드스피츠 2강 오브젝트 - 2회차(2) 4.코드스피츠 2강 오브젝트 - 3회차 5.코드스피츠 2강 오브젝트 - 4회차 6.코드스피츠 2강 오브젝트 - 5회차 7.코드스피츠 2강 오브젝트 - 6회차 (Final) 이 포스트는 Java 예제를 Swift 예제로 바꿔서 다루고 있습니다. Library와 Framework 차이점? Framework 라고 말할 수 있다면 제어 역전이 되어 있는지 아닌지? 를 보면 알 수 있다. 제공한 메서드가 어느 시점에 호출될지를 우리가 결정하지 못한다. 이 제어를 Framework 에서 담.. 더보기
코드스피츠 2강 오브젝트 - 2회차(2) 책 오브젝트 13장를 기반으로 하는 코드스피츠 강의 오브젝트2 - 2회차 (2) 를 정리한 내용입니다. 1. 코드스피츠 2강 오브젝트 - 1회차 2. 코드스피츠 2강 오브젝트 - 2회차(1) 3.코드스피츠 2강 오브젝트 - 2회차(2) 4.코드스피츠 2강 오브젝트 - 3회차 5.코드스피츠 2강 오브젝트 - 4회차 6.코드스피츠 2강 오브젝트 - 5회차 7.코드스피츠 2강 오브젝트 - 6회차 (Final) 계약의 전파 Precondition 을 검증해야 한다는 로직이 있을 때 메시지 체인마다 Precondition 검증을 해야하는지? 중복코드가 발생하고 Dry 원칙을 위반하게 된다. 메시지 체인에 계약을 유지시킬수 있는 방법이 없는가? 생성자에 Null 이 들어올수 있기 때문에 Invariant 검증을 하.. 더보기
코드스피츠 2강 오브젝트 - 1회차 책 오브젝트 11장를 기반으로 하는 코드스피츠 강의 오브젝트2 - 1회차 를 정리한 내용입니다. 1. 코드스피츠 2강 오브젝트 - 1회차 2. 코드스피츠 2강 오브젝트 - 2회차(1) 3.코드스피츠 2강 오브젝트 - 2회차(2) 4.코드스피츠 2강 오브젝트 - 3회차 5.코드스피츠 2강 오브젝트 - 4회차 6.코드스피츠 2강 오브젝트 - 5회차 7.코드스피츠 2강 오브젝트 - 6회차 (Final) 책의 방향 소개 책의 내용에서 전반부는 SOLID 원칙이나 SOLID 원칙을 확장한 내용을 가지고 설명하지만 후반부는 JVM, C++ Compiler 가 어떻게 객체지향 언어를 결과를 내는지와 그 시스템을 어떻게 이용해서 객체지향을 구현하는지 다루고 있다. 주 내용은 Pointer of Pointer 이다. 직.. 더보기
[Swift] Leetcode 684. Redundant Connection 684. Redundant Connection In this problem, a tree is an undirected graph that is connected and has no cycles. The given input is a graph that started as a tree with N nodes (with distinct values 1, 2, ..., N), with one additional edge added. The added edge has two different vertices chosen from 1 to N, and was not an edge that already existed. The resulting graph is given as a 2D-array of edges... 더보기