본문 바로가기

전체 글36

[알고리즘] 이분탐색 헷갈리지 않기 저는 이분탐색 문제를 풀 때마다 헷갈립니다. . 탈출 조건 중 어느 걸 선택해야 할지, while 문도 범위를 매번 정확히 하지 않은채 문제를 풀곤 했는데요. 오늘 헷갈리지 않게 구현하는 방법을 정리하려고 합니다 ! 이분탐색 결정 문제의 답이 이분적일 때 사용할 수 있는 탐색 기법입니다. 이 때, 결정 문제란 답이 Yes or No인 문제를 말합니다. 예를 들어, 1 ~ 50까지의 오름차순 정렬된 카드 더미(v[])에서 val번 카드를 찾는 문제를 예시로 들게요. 이 경우, 결정 문제를 "v[i] >= val인가 ?"로 잡으면 결정 문제는 i가 증가함에 따라 F, F, ... F, T, T, ... 와 같이 분포하게 됩니다. 이 때, 찾고자 하는 값은 처음으로 v[i] >= val인 지점, 즉 처음 결정.. 2022. 11. 25.
[알고리즘] 다익스트라 + 플로이드 워샬 구현 (Swift) 합승 택시 요금 문제를 풀다가 다익스트라랑 플로이드 워샬에 대해 정리하고 가려고 합니다 . . 문제는 가중치 있는 그래프가 주어지고, 시작점[s]으로부터 특정 한 지점[i]을 거쳐 결국 다른 두 개의 도착지[a, b]에 도착하는 최단거리를 구하면 되는 문제입니다. 다익스트라 가장 먼저 다익스트라 풀이를 생각했습니다. 다익스트라는 최단거리를 갱신해나가는 알고리즘으로 일종의 dp 방식입니다. 코드로 구현하는 게 오늘 포스팅의 목적이기 때문에 알고리즘은 간단하게 설명할게요 . . ! 1. 최단 거리 저장하는 배열 dist[]를 INF로 초기화 2. 시작점부터 인접한 노드들 돌면서 최단 거리 갱신 - priorityQueue 사용하여 cost 가장 낮은 노드순으로 pop하기 - dist[다음노드] > 현재 거리.. 2022. 11. 24.
[RxSwift] Observable.create & Disposable.create 어제 노티 관련 포스팅 중에 Disposable.create에 대한 의문이 생겼었습니다. 왜 저걸 해주는 거지 ? 그래서 . . 오늘 Rx 코드 뜯어보면서 알아보려고 합니다 ! 혼자 공부한 것이므로 틀린 내용이 있을 수 있습니다 . . 자 그럼 Disposable.create를 알아보기 전에 . . 그 앞에 Observable.create부터 살펴봐야겠죠 ? 왜냐면 ~ 저번 Noti + Rx에서 Observable.create으로 먼저 Noti를 생성한 후에 Disposable.create로 remove 해주고 있으니까 . . 전에 RxSwift - Observable 포스팅에서 create(:)에 대해 정리했었는데요. "create은 escaping 클로저로 escaping에서는 AnyObserver를.. 2022. 11. 22.
[RxSwift] NotificationCenter, Notification 프로젝트 진행 중에 키보드에 의해 뷰가 가려지는 상황을 해결해야 했습니다 . . 이 때, NotificationCenter로 사용해 구현할 수 있었는데요 (+ RxSwift 로 ~) 그래서 !! NotificationCenter에 대해서 정리하고 가려합니다 . . 의식의 흐름대로 공부해서 다른 내용도 있을 수 있습니다 . . 양해 부탁드려요 . . NotificationCenter NotificationCenter란 등록된 observers에게 정보를 broadcast가 가능하게 하는 notification dispatch 매커니즘이라고 합니다. 흠. . 무슨소릴까 싶지만 일단 observers 들에게 어떠한 방식으로 정보를 전달하는 아이 . . ? 아래 설명을 계속 살펴볼게요. notification .. 2022. 11. 21.
[RxSwift] Combining Operators 지난 filtering이나 transforming operators들을 살펴보자면 , , Swift 표준 연산자들과 아주 유사했는데요 ! Combining Operators들도 유사한 것들이 많다고 합니다 . . 하하 가봅시다 ~ Prefixing and concatenating 단순해석하자면 앞에 붙이거나 연결하는 것들 ? 입니다 . . 흠 1. startWith(_:) 현재 위치나 네트워크 연결 상태와 같이 현재 상태가 필요한 상황이 있습니다. 이럴 때 현재 상태와 함께 초기값을 붙일 수 있습니다. [코드] example(of: "startWith") { // 1 let numbers = Observable.of(2, 3, 4) // 2 let observable = numbers.startWith(.. 2022. 11. 18.