전체 글 140

RxSwift에서 observe(on:)으로도 UI 업데이트가 즉시 반영되지 않는 이유와 해결법

문제상황ViewController에서 컬렉션뷰의 내부 inset을 변경하기 위해(UI 업데이트)observe(on: MainScheduler.instance) 를 사용했지만 바로 업데이트가 되지 않는 문제가 발생헀다 // 컬렉션뷰의 bounds와 책 개수에 따라 컬렉션뷰의 셀 인셋 설정 private func bindCollectionViewInsets() { Observable.combineLatest( books.map { $0.count }, // 현재 책 개수 homeView.topView.seriesNumberCollectionView.rx.observe(CGRect.self, "bounds") // 뷰 크기 변화 감지 (옵셔널 타입..

Today I Learn 2025.04.01

Swift - 날짜 설정 DateFormmater VS Date.FormatStyle

'1998-07-02' 형태의 Json 데이터(String)를 변형하여 'June 26, 1997'(String) 형태로 표시하려고 한다1. DateFormmaterDateFormatter는 Foundation에서 제공하는 클래스로 날짜를 문자열로 변환하거나 반대로 변환하는 기능을 한다String 값을 dateFormmater를 이용하여 Date 타입으로 변환Date 타입의 dateStyle, locale을 설정하여 Date → String 타입으로 변환 init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) // '1998-07..

Today I Learn 2025.03.27

프로그래머스 - 기능 개발 (Queue 사용)

https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  아이디어1. 뒤에 있는 기능은 앞에 있는 기능보다 먼저 개발되어도 앞에 있는 기능이 배포될 때 같이 배포된다-> 앞 기능이 무조건 먼저 나간다 (FIFO) -> 큐 사용2. periods: 각 작업이 완료될 때까지 필요한 기간을 나타내는 배열 ex) progresses(작업 진도): [93, 30, 55]speeds(작업 속도): [1, 30, 5]periods(작업 완료까지의 기간): [7, 3, 9]작업 완료까지의 기간을 수식으로 나타내면..

프로그래머스: 가장 먼 노드

school.programmers.co.kr​   아이디어1. 양방향 그래프이므로 각 노드와 연결된 모든 노드를 2차원 배열 형태로 정의 ex) [[],[2, 3], [1, 4, 5] ... ]- 0번 노드는 없으니 비워둠- 1번 노드와 연결된 노드는 2, 3- 2번 노드와 연결된 노드는 1, 4, 5 (양방항 그래프이므로 1번 노드 포함) 2. 1번 노드와 떨어진 거리를 나타내는 배열 생성 (distance) 3. 큐를 생성하여 1번 노드와 연결된 노드를 큐에 넣어줌 - 큐에서 꺼내면서 꺼낸 노드와 연결된 노드를 큐에 넣어줌- 큐에서 꺼냈으면 2. 에서 만든 거리를 나타내는 배열에 거리를 더해줘야 되는데   이전 노드에 1만큼 떨어진 것이므로 튜플 형태로 큐에 넣어야 될듯 (이전 노드, 현재 노드)- ..

Swift에서의 힙(Heap) 자료구조

완전 이진 트리(Complete Binary Tree) 구조를 가지며, 우선순위 큐(Primary Queue)를 구현하는 데 자주 사용된다완전이진트리: 마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있으며, 마지막 노드는 가장 왼쪽에 있는 트리우선순위 큐: 높은 우선순위를 가진 원소가 낮은 우선순위를 가진 원소보다 먼저 처리되는 큐  Swift의 기본 자료구조에는 Heap이 포함되지 않으므로 직접 구현해야 한다힙의 종류최소 힙(Min Heap): 부모 노드의 값이 자식 노드보다 항상 작거나 같음 → 가장 작은 값이 루트에 위치최대 힙(Max Heap): 부모 노드의 값이 자식 노드보다 항상 크거나 같음 → 가장 큰 값이 루트에 위치 https://www.geeksforgeeks.org/introduc..

알고리즘(Swift) 2025.03.25

프로그래머스 - 프로세스

https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr    간단하게 정리하면실행 대기 큐에 각각 우선순위가 있는 프로세스가 있는데프로세스를 하나 꺼냈을 때, 우선순위가 제일 높지 않다면 다시 큐에 넣고제일 높은 우선순위를 가진다면 실행한다이때, 특정 프로세스가 몇 번째로 실행되는지를 구하는 문제이다가장 먼저 든 생각은큐에서 프로세스를 꺼냈다가 다시 넣는 과정에서 처음 인덱스를 어떻게 구분할까? 라는 생각이 먼저 들었다우선순위가 담긴 배열에서 pop하고 append하는 과정을 거치면 index 번호..

Today I Learn - 배열의 짝수 번째 요소를 제거하는 다양한 방법

문제 )[ ] Int 배열의 짝수번째 요소를 제거해서 반환하는 함수 a 를 작성해주세요.테스트 입력: [1, 2, 3, 4, 5]테스트 출력: [1, 3, 5] 배열을 입력 받아 짝수번째 요소를 제거하고 남은 요소를 반환하는 함수를 작성하는 간단한 문제이다 내가 작성한 코드보다 코드리뷰를 통해 확인한 다른 팀원분들의 방법이 더 효과적이고 해당 코드를 통해 새롭게 알게된 프로퍼티를 소개하려고 한다   아래는 내가 해결한 방식이다 1. enumerated()를 사용하여 (offset, element) 튜플 생성2. filter를 이용하여 짝수 번째 요소를 제거3. map을 사용하여 (offset, element) 튜플 중 element만 반환 enumerated() + filter + map // In..

Today I Learn 2025.03.20

프로그래머스 - 단어변환 (String.Index, Array(String) 시간 복잡도 비교 분석) + BFS

이전 포스트에서는 단어 변환 문제를 DFS와 String.Index 타입을 이용하여 문제를 해결했다이번 포스트에서는 String.Index 타입으로 subscript에 접근했지만 zip과 Array(String)을 이용하는 방법으로 문제를 해결해보고최종적으로 String.Index와 zip, Array(String)을 통한 문자 비교 방법의 시간 복잡도를 비교 분석해보려고 한다 2025.03.19 - [알고리즘 문제(Swift)] - 프로그래머스: 단어 변환(DFS + String.Index) 프로그래머스: 단어 변환(DFS + String.Index)https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스SW개발자를 위한 평가, 교육..