일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- identifiable
- 타임라인 포맷팅
- swift bottomsheet
- task cancellation
- RxSwift
- task cancel
- reactorkit
- custom ui
- paragraph style
- swift 백준
- uikit toast
- tusit font 추가 방법
- coordinator
- custom navigation bar
- Tuist
- button configuration
- DP
- traits
- domain data
- swift 점선
- claen architecture
- rxdatasources
- swift concurrency
- swift dashed line
- custombottomsheet
- BFS
- swift navigationcontroller
- swift custom ui
- SWIFT
- UIKit
- Today
- Total
목록2025/03 (12)
김경록의 앱 개발 여정

https://www.acmicpc.net/problem/1475import Foundationlet input = readLine()!var arr = Array(repeating: 0, count: 10)for char in input { if let num = Int(String(char)) { arr[num] += 1 }}// 6에 몰아넣음, 홀수여도 올림을 해야해서 + 1arr[6] = (arr[6] + arr[9] + 1) / 2arr[9] = 0print(arr.max()!)
Identifiable이란 무엇인가?Swift의 Identifiable은 각 객체가 고유한 ID로 식별될 수 있도록 하는 프로토콜입니다. 이 프로토콜은 id라는 고유 속성을 요구하며, id는 Hashable 및 Equatable을 준수해야 합니다. 이를 통해 컬렉션 내에서 객체를 빠르게 구분하거나 중복을 방지할 수 있습니다.protocol Identifiable { associatedtype ID: Hashable var id: ID { get }}기본적으로 UUID나 Int, String 등 Hashable한 타입이면 id로 사용할 수 있습니다. 언제 써야 하는가?Identifiable을 언제 사용해야 하는지는 주로 객체의 고유성을 식별할 필요가 있는지에 따라 달라집니다. 다음과 같은 경우 ..

https://www.acmicpc.net/problem/9465 풀이 아이디어 일정한 규칙성이 있어서 dp로 풀이했습니다.점화식은 아래와 같습니다. dp[0][i] = max(dp[1][i-1], dp[1][i-2]) + board[0][i]dp[1][i] = max(dp[0][i-1], dp[0][i-2]) + board[1][i]n이 1인 경우등도 잘 신경써줍니다(한번 틀림..)자세한 풀이는 아래와 같습니다. 풀이let t = Int(readLine()!)!for _ in 0..

https://www.acmicpc.net/problem/7569 풀이 아이디어그래프 탐색 문제입니다.Y축까지 있으므로 3차원 배열을 사용합니다.이동 방향은 기본적인 상하좌우에서 위 아래가 추가된 6개로 이동합니다. 자세한 풀이는 아래와 같습니다. 풀이import Foundation// 가로(m), 세로(n), 높이(h)let input = readLine()!.split(separator: " ").map { Int($0)! }let m = input[0], n = input[1], h = input[2]// 3차원 배열 graph[h][n][m] 초기화var graph = [[[Int]]]()for _ in 0..= h || ny = n || nx = m { continue ..

https://www.acmicpc.net/problem/1303 풀이 아이디어그래프 탐색문제입니다.적군과 아군의 경우 모두 조사해야합니다.매번 bfs로 탐색하여 결과값의 제곱만큼 += 해주어 결과를 출력합니다.자세한 풀이는 아래와 같습니다. 풀이let nm = readLine()!.split(separator: " ").map { Int($0)! }let (m, n) = (nm[0], nm[1])let dn = [0, 0, -1, 1]let dm = [-1, 1, 0, 0]var graph = [[String]]()var isVisited = Array(repeating: Array(repeating: false, count: m), count: n)var whiteCount = 0var blueCou..

풀이 아이디어힙 구현 문제입니다.풀이struct Heap { private var array: [T] = [] private let isOrderedBefore: (T, T) -> Bool init(isMinHeap: Bool = true) { self.isOrderedBefore = isMinHeap ? { $0 $1 } } var isEmpty: Bool { array.isEmpty } var count: Int { array.count } var peek: T? { array.first } /// 요소 추가 (O(log n)) mutating func insert(_ value: T) { array.ap..
✅ Single ?Single은 하나의 값을 방출(success)하거나, 에러(error)를 방출하는 RxSwift의 Observable 타입입니다.즉, Single는 "성공했지만 반환할 값이 따로 없다"는 의미를 가집니다.예제func test(email: String) -> Single { return Single.create { single in do { let request = try testTarget.test(email: email).asURLRequest() AF.request(request) .validate(statusCode: 200..🧐 언제 사용할까?✅ API 응답 값을 사용하지..
소프트웨어 아키텍처를 설계하다 보면 DTO(Data Transfer Object)와 도메인 모델(Domain Model)이라는 용어를 자주 접하게 됩니다. 이 두 가지 개념은 비슷해 보일 수 있지만, 각자의 역할과 책임이 명확하게 구분되어 있습니다.어느 순간 이 둘의 개념 명확히 분리하지 않고 사용하던 제 모습을 발견해서오늘은 DTO와 도메인 모델의 차이점, 그리고 왜 이들을 분리해서 사용해야 하는지에 대해 알아봤습니다. 1. DTO (Data Transfer Object)역할 및 특징데이터 전송 전용: DTO는 주로 네트워크 요청/응답, API 통신, 데이터베이스 결과 등의 외부 시스템과의 데이터 교환에 사용됩니다.단순 데이터 컨테이너: 비즈니스 로직이나 행동이 포함되지 않고, 오직 데이터를 담아 전..

유튜브나 인스타 등에서 유저의 시간 기록을 위와 같이 포맷팅 하는 방법에 대해 짤막하게 써보겠습니다.코드 import Foundationextension String { func timeAgo() -> String? { // ISO8601DateFormatter를 사용하여 입력된 날짜 문자열을 Date로 변환 let formatter = ISO8601DateFormatter() guard let inputDate = formatter.date(from: self) else { return nil } // UTC 시간대 기준으로 현재 시간을 가져옵니다. let calendar = Calendar.current g..

개요 우리 디자인팀이 제작해 준 게시글 자세히 보기 화면은 기본 뼈대 자체는 완성되어 있었지만, 기획 검토 중 유저가 선택한 사진의 개수와 태그의 개수가 유동적이라는 점에서 놓친 부분이 있었습니다.즉, 사진이나 태그가 전혀 없을 수도 있고, 일부만 있을 수도 있는 상황을 모두 고려해야 했습니다. 기존 80% 완성해놓은 뷰에 조건 별 제약 조건을 업데이트하는 과정을 글에 담았습니다.시도해 본 방식은 아래와 같습니다.1. 유저가 설정하지 않은 경우 해당 뷰의 높이를 0으로 지정하기단순한 접근으로 사진과 태그 영역의 높이를 0으로 지정하는 방식으로 처리해봤는데, 이 경우 이미 설정된 Constraints가 그대로 유지되어 글과 소셜 버튼 사이에 불필요한 간격이 발생했습니다.즉, 단순히 뷰의 높이만 0으로 만..