분류 전체보기 67

Dijkstra

Dijkstra(다익스트라) Dynamic Programming을 이용한 최단경로 알고리즘 특정 노드에서 다른 나머지 노드로 가는 최단경로를 구할 때 사용 첫노드부터 모든 노드의 최단거리 저장하는 배열 및 우선순위큐 사용 Dijkstra 알고리즘 순서 1. 노드의 개수만큼 distances 생성, 시작 노드의 값은 0 2. 우선순위 큐 생성 및 첫노드 가중치 0 3. 우선순위큐에서 추출된 노드와 연결된 인접 노드와의 거리 + 추출된 노드 가중치를 계산하여 distances의 값보다 적으면 distances업데이트 및 우선순위큐 insert 구현 코드 struct NodePriority: Comparable { var node: String = "" var priority: Int = 0 static fu..

Algorithm 2021.12.28

Floyd Warshall

Floyd Warshall 그래프에서 도착할 수 있는 모든 쌍에대한 최단거리를 구하는 알고리즘 그래프를 기준으로 이차원배열 생성 Dynamic Programing기법을 이용해 각 쌍의 최단거리를 계산 및 업데이트 예제) 그래프 최소 왕복 길이 계산 초기 cost INF 1 5 INF INF 2 INF 1 INF 플로이드 와샬 알고리즘 후 cost INF 1 3 INF 3 2 INF 1 3 func floydWarshall(inputs: [[Int]], node: Int) -> Int { let INF = 987654321 var result = INF var cost = Array(repeating: Array(repeating: INF, count: node), count: node) for input..

Algorithm 2021.12.28

Binary Search

Binary Search(이분탐색) 데이터의 중간값을 확인하면서 탐색하는 기법 데이터가 정렬 되있을 때 효과적 시간 복잡도는 O(logN) func binarySearch(list: [Int], element: Int) -> Int? { var firstIndex = 0 var lastIndex = list.count - 1 while firstIndex element { lastIndex = midIndex - 1 } else { return midIndex } } return nil } binarySearch(list: [1, 3, 4, 5, 6, 7, 9], element: 7) // Optional(5) binarySearch(list: [1, 3, 4, 5, 6, 7, 9], element: 8..

Algorithm 2021.12.28

View Programming Guide for iOS

아래의 글은 View Programming Guide for iOS의 일부를 번역한 글입니다. View And Window Architecture view와 window는 앱의 유저 인터페이스를 보여주고 인터페이스의 상호작용을 다룬다. UIKit과 다른 여러 프레임워크들은 여러 뷰들을 제공하고 있다. 또한 앱을 표준화된 View와 달리 커스텀하여 지정할 수 있다. 나만의 커스텀뷰를 사용할때 UIView와 UIWindow의 개념과 구조에대해 이해해야 한다. 이러한 기능이 작동하는 것을 이해하는 것은 어플리케이션에 변화가 일어났을 때 View가 적절하게 동작하게 하는데 중요하다. View Architecture Fundamentals 시각적인 대부분의 작업은 UIView의 인스턴스인 view 객체로 수행된다..

공식문서 2021.12.15

Swift Combination, Permutation

Combination 하나의 리스트에서 중복되지 않는 값들을 n개의 조합으로 구함 func combination(_ target: [T], _ count: Int) -> [[T]] { var result = [[T]]() func combi(_ nowTarget: [T], _ index: Int) { if nowTarget.count == count { result.append(nowTarget) return } for i in index.. [[T]] { var result: [[T]] = [] var visited = Array(repeating: false, count: target.count) func permutate(_ nowTarget: [T]) { if nowTarget.count == c..

Algorithm 2021.12.14

Delegate Pattern

Delegate Delegate(대리자, 위임자) 어떠한 객체가 다른객체에게 책임을 위임하는 것 iOS에선 보통 protocol을 사용하여 해당 객체의 일을 protocol을 채택하여 대신 수행한다.(순환참조 주의!) 객체간에 직접 참조해서 작업을 하는것 보다 delegate 패턴을 통해 객체간의 의존성과 책임을 줄일 수 있다. TextFieldDelegate 예시 TextField와 Label을 추가해 준뒤 ViewController에서 UITextFieldDelegate를 채택 viewDidLoad안에 textField.delegate.self(이부분이 TextField의 일을 위임하겠다는 뜻) 채택한 UITextFieldDelegate의 func중 textFieldShouldReturn함수를 정의 ..

Design Pattern 2021.12.14

struct, class, enum

struct 여러개를 한번에 묶어 추상화 하는데 사용 call by value(값에 의한 호출) 복사의 개념(할당할 때 새로운 객체를 생성하고 변경이 일어났을때 복사) 상속 불가 Stack영역에 할당됨 struct B{ var num: Int = 0 } var test3 = B() var test4 = test3 test3.num = 199 print(test4.num) // test4는 test3과는 별도의 메모리에 관리되고 있으므로 test4.num은 0 class call by reference(참조에 의한 호출) 참조의 개념(할당을 할 때 메모리를 새로 할당하는 것이 아닌 메모리를 참조) 상속 가능 Heap영역에 할당됨 class A{ var num: Int = 0 } var test1 = A()..

swift 2021.12.14

Frame, Bounds

Frame superview의 좌표시스템에서 위치와 사이즈를 나타낸다. superview기준에서 측정한 좌표 size는 view를 감싼 사각형의 영역(ex 회전하면 변경 가능) 하위뷰가 여러개 있으면 상위뷰의 좌표를 변경하면 하위뷰도 같이 이동 Bounds 자신의 좌표시스템에서의 위치와 크기 자신의 좌표계를 기준으로 삼음(초기 origin은 (0, 0)) size는 view자체의 영역(회전해도 크기는 그대로) view의 origin을 변경하면 해당 view의 viewport가 이동하여 자기자신은 가만히 있고 subView들이 반대로 이동해 보인다. ScrollView는 bounds를 변경하여 동작 언제 Frame을 쓰고 언제 Bounds를 쓰는가? Frame : 해당 객체를 상위뷰를 기준으로 배치해야 할..

iOS 기초 2021.12.13

Clean Architecture

Clean Architecture란 Robert C.Martin(Uncle-Bob)분이 블로그에 올린 아키텍처 중 하나이다. 프레임워크의 독립성, testable, UI의 독립성, Database의 독립성, 외부 로직에 대한 독립성 등 이런 여러 아키텍처의 장점을 하나로 모은 Clean Architecture를 만들어 소개 Dependency Rule 외부 원으로부터 화살표가 안으로 향하는 모습을 볼 수 있다. 바깥쪽일수록 상위모듈의 특성이고 안쪽일수록 하위 모듈의 특성을 가진다. Clean Architecture에서 중요시 하는 부분 중 하나가 화살표가 상위 모듈부터 안쪽인 하위 모듈만 의존하는 규칙이다. 안쪽의 모듈들은 바깥쪽의 모듈에 대해 어떤한것도 알 수 없다.(참조할 수 없다) FrameWork..

Design Pattern 2021.12.10

MVC Pattern

MVC? Model, View, Controller로 이루어진 구조 View와 Contoller, Model과 Contoller는 서로 통신하는 구조이지만, View와 Model은 서로 알지못하는 구조 Model 앱에서 필요한 데이터 담당 네트워크 데이터 persistence(DB, Core Data) Model -> Controller Model의 값이 변경 변경했음을 Notification Controller는 Notification받음 View 화면에 직접적으로 보이는 View 담당 UIKit에 의존적 View -> Controller View로부터 사용자 action발생 Delegate나 DataSource로 ViewController연결 Controller가 입력에 대한 처리 수행 Control..

Design Pattern 2021.12.10