일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DP
- swift dashed line
- identifiable
- rxdatasources
- swift custom ui
- task cancellation
- uikit toast
- custombottomsheet
- coordinator
- swift navigationcontroller
- custom ui
- swift concurrency
- BFS
- 타임라인 포맷팅
- scene delegate
- custom navigation bar
- domain data
- claen architecture
- button configuration
- RxSwift
- swift 백준
- 버튼 피드백
- Tuist
- swift 점선
- traits
- swift bottomsheet
- UIKit
- reactorkit
- SWIFT
- task cancel
- Today
- Total
목록분류 전체보기 (84)
김경록의 앱 개발 여정
✅ 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으로 만..

https://www.acmicpc.net/problem/14248 풀이 아이디어이차원 그래프를 이용한 그래프탐색 문제입니다이동방향은 좌 우 모두 가능하므로 [-1, 1] 로 지정합니다. 풀이let n = Int(readLine()!)!let graph = readLine()!.split(separator: " ").map { Int($0)! }//인덱스 맞추기let s = Int(readLine()!)! - 1var isvisited = Array(repeating: false, count: n)let direction = [-1, 1]func dfs(position: Int) { if position = n || isvisited[position] == true { retur..

https://www.acmicpc.net/problem/16173 풀이 아이디어그래프 탐색 문제입니다bfs를 선호하지만 연습을 위해 재귀를 활용한 dfs로 풀이했습니다.두 방향으로만 이동가능하며 그래프를 넘어가면 즉시 종료시켰습니다.풀이 import Foundationlet n = Int(readLine()!)!var graph = [[Int]]()for _ in 0.. Bool { if x = n || y >= n || visited[x][y] { return false } if graph[x][y] == -1 { return true } visited[x][y] = true let jump = graph[x][y] ..

https://www.acmicpc.net/problem/24480 풀이 아이디어 일반적인 dfs입니다.인접 정점을 내림차순으로 방문한다는 점을 주의해야하는 문제입니다재귀로 풀이했습니다. 풀이let nmr = readLine()!.split(separator: " ").map{Int($0)!}let (n,m,r) = (nmr[0],nmr[1],nmr[2])// []로 repeating하여 생성할 경우 반드시 타입을 선언해야합니다.var graph: [[Int]] = Array(repeating: [], count: n + 1)for i in 0..) { if isVisited[next] == 0 { depth += 1 dfs(node: next) ..

https://www.acmicpc.net/problem/7785 풀이 아이디어해시 문제입니다.최초에 출근 set, 퇴근 set을 받고, subtracting를 통해 남은 사람을 구하여 제출하였는데 오답처리가 되었습니다.이 경우엔 중복 입장의 경우를 처리하지 못하는 게 문제였습니다. 예를 들어, A라는 사람이 2회 출근하고 1회 퇴근했다면 회사에 남은 사람 있어야 하는데제 최초 풀이는 해당 과정은 처리하지 못했습니다. 단순히 하나의 Set에서 inset와 remove를 해주는 걸로 수정하였습니다. let n = Int(readLine()!)!var set = Set()for _ in 0.. $1}resultArr.forEach { print($0)}

풀이 아이디어그래프 탐색 문제입니다.문제를 조금 자세히 읽어봐야하는데초대 인원은 자신의 친구, 친구의 친구까지입니다.본인과의 거리가 2까지인 사람이 초대받는 사람입니다. 방문배열과 거리배열을 사용해서 bfs로 풀이했습니다. 풀이 let n = Int(readLine()!)!let m = Int(readLine()!)!var graph: [[Int]] = Array(repeating: [], count: n + 1)for _ in 0..

https://www.acmicpc.net/problem/18352 풀이 아이디어- 단방향 그래프를 이용한 bfs문제입니다.- 출발점에서 목표치까지 거리를 쟀을 때 특정 거리인 도시를 모두 출력합니다- 해당 문제는 수의 범위가 크므로 큐를 직접 작성하여 풀이합니다.풀이 import Foundation// n 도시개수, m 도로개수, k 목표거리, x 출발번호let nmkx = readLine()!.split(separator: " ").map { Int($0)! }let (n, m, k, x) = (nmkx[0], nmkx[1], nmkx[2], nmkx[3])var graph: [[Int]] = Array(repeating: [], count: n + 1)for _ in 0.. a는 추가하지 않음}//..