swift 176

Swift 디자인패턴 Factory Pattern (팩토리 패턴)

Swift 디자인패턴 Factory Pattern (팩토리 패턴) Factory Pattern은 객체 생성을 캡슐화하여, 클라이언트가 객체 생성 방식에 대해 알 필요 없도록 설계하는 생성 패턴이를 통해 객체 생성 로직을 중앙 집중화하고, 유지보수를 용이하게 함. 히스토리2022-05-08: 디자인 패턴 스터디 정리2024-11-28: 포스팅 글 재정리 및 예제 변경 Factory Pattern팩토리 패턴은 다른 개념으로도 확장 가능단순 팩토리 패턴: 조건에 따라 객체를 생성하는 메서드만 제공 (정식 팩토리 패턴은 아님)팩토리 메서드 (Factory Method) 패턴: 서브클래스에서 객체 생성 과정을 오버라이드하여 생성 로직을 확장추상 팩토리 (Abstract Factory) 패턴: 관련 객체군을 생성하..

[iOS] tableViewCell Swipe Action 구현하기

tableViewCell Swipe Action 구현하기 ✅ 이번 시간에는 tableViewCell Swipe Action을 구현해보자 직접 애플 문서를 읽어보는 것을 추천하지만, 이 포스팅에서는 정말 간략하게 어떻게 사용하는 지만 알아보자. 이번 포스팅에서는 1. tableView에서 leading과 trailing swipe를 지원해주는 메소드를 사용하여 구현하는 것 2. editStyle을 메소드를 활용하여 구현하는 것 을 볼 예정이다. ✅ 1. tableView에서 leading과 trailing swipe를 지원해주는 메소드를 사용하여 구현하는 것 func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt i..

[Swift] 프로그래머스 LV2. [1차] 뉴스 클러스터링

프로그래머스 LV2. [1차] 뉴스 클러스터링 ✅ 걸린시간 : 4:26 ~ 5:35 (약 1시간 10분) 처음으로 문제를 해결하는데 걸린시간 4:26 ~ 4:56(30분) 추가적으로 시간이 걸린 이유: 테스트케이스 4,7,9,10,11 실패 테스트 케이스 4,7,9,10,11 [반례] str1: "BAAAA" str2: "AAA" answer: 32768 이 부분에서 봐야하는 점은 중복의 처리이다. 2글자씩 끊을 경우, str1 = ["BA", "AA", "AA", ""AA"] str2 = ["AA", ""AA"] 이렇게 나뉘게 된다. 여기에서 str1에는 AA가 3개 str2에는 AA가 2개이다. 따라서 중복은 2개가 되어야한다. 그런데 위의 테스트 케이스가 틀린 경우에는 이를 정확하게 처리하지 못하는..

Swift 디자인패턴 MVVM Pattern (MVVM 패턴)

Swift 디자인패턴 MVVM Pattern (MVVM 패턴) MVVM 패턴은 모바일 개발에서 자주 사용하는 아키텍처 패턴. 히스토리2022-04-26: 디자인 패턴 스터디 정리2024-11-28: 포스팅 글 재정리 및 예제 변경   MVVM Pattern기본적으로 아래의 구성요소들로 구성Model: 앱의 데이터 및 비즈니스 로직의 일부View: 앱의 화면 영역 담당ViewModel: View와 Model의 중재자 역할MVVM 패턴은 파생 아키텍처가 많고, 아키텍처에 따라 용어의 차이도 존재하여, 가장 기본적인 것들을 서술클린아키텍처MVVM-CVIPERRIBsReactorKitTCA 코드 예제UIKit이랑 SwiftUI에서 모두 MVVM을 사용하는 기본 예제를 확인할 수 있도록 만들어 둠ViewModel..

[Swift] 프로그래머스 LV2. 수식 최대화

프로그래머스 LV2. 수식 최대화 ✅ 구현만 하면 문제였는데, 은근히 오래걸렸다. 내가 구현에서 생각보다 오래걸리는데, 문제를 생각하고 설계는 빨리 마치는데, 근데 자꾸 어떤 문제가 발생한다.. 예외처리가 부족하기도 하지만, 그보다도 코드상에서 remove 같은 작업에서 발생하는 실수가 너무 많다. ✅ 코드 알고리즘 접근법에 대해서 처음에는 계산기 알고리즘을 사용하려고 했다. 중위 후위 등 구글에 치면 다양한 알고리즘이 나온다!! 하지만 난, 꼭 그런걸 정량적으로 알고 있어야 문제를 푸는건 불만이었기에 다른 로직으로 내 방식대로 풀어보았다. priority를 6번 반복하는 이유는 어차피 연산자 3개로 우선순위를 매기는 경우의 수가 6가지 밖에 되지 않는다. 두번째는 while문인데, 연산자를 찾아서 그 ..

[Swift] 프로그래머스 LV2. [3차] 파일명 정렬

프로그래머스 LV2. [3차] 파일명 정렬 ✅ 프로그래머스 LV2. [3차] 파일명 정렬 하하,, 문제 딱 봤을 때 이건 10분컷! 이랬는데 결국은 엄청 오래걸림 처음에는 정규 표현식으로 해결하려고 했는데, 정규 표현식 공부를 제대로 해본 적 없어서 구글링으로 사용하는건 학습에 별로 도움 안될거 같아서 패스 (+ 정규 표현식의 시간복잡도에 대한 개념이 없어서 알고리즘이 효율적이지 않을 수도 있단 생각도 들었음) 그래서 그냥 for문을 통해서 접근함. 근데!! 65점에서 막혔음 ^__^ ✅ 코드 (틀린코드 65점) 하도 많이 틀려서 질문도 함.. 반례를 못찾아서 https://programmers.co.kr/questions/30185 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로..

[Swift] 프로그래머스 LV2. 방문 길이

프로그래머스 LV2. 방문 길이 ✅ 쉬웠다. 문득 드는 생각인데, 이렇게 잘 풀리는 문제만 푸는게 도움이 될까 싶다.. ㅠ 🟠 알고리즘 접근 및 풀이의 흐름사실 난이도 자체는 쉬운데 +9점이나 받았다. 카카오 문제가 더 까다로웠던 것 같은데..? 1. 처음에는 point = (x,y)로 두어서 방문한 point를 재방문 안하는 것으로 처리 문제점: (5,5) -> (4,5)와 (4,4) -> (4,5)를 구분할 수 없어서 문제 풀이의 오류 발생 2. 시작점과 도착점을 전부 저장하게끔 변경previousPoint, currentPoint = (5,5,4,5) 이런 식으로 저장따라서 어디에서 어디로 가는지 확인할 수 있어짐문제점 : 왔다갔다의 경우 중복으로 체크가 된다.예시 (4,5,5,5) (5,5,4,5..

[Swift] 프로그래머스 LV2. 주차 요금 계산

프로그래머스 LV2. 주차 요금 계산 ✅ 프로그래머스 LV2. 주차 요금 계산 2022 KAKAO BLIND RECRUTMENT 문제다! 카카오 문제를 풀때는 그냥 이름만으로도 늘 짜릿해. ✅ 코드 레벨은 2지만 풀었을 때 점수는 1점만 주더라. 그만큼 쉬웠다는 말이겠지 ㅜㅠ 근데 진짜 쉽긴 했다... import Foundation func solution(_ fees:[Int], _ records:[String]) -> [Int] { var dict: [String: String] = [:] // 차량번호 : 시간 var totalTimeArray: [String: Int] = [:] // 차량번호 : 누적시간 var priceDict: [String: Int] = [:] // 차량번호 : 금액 //..

[Swift] 프로그래머스 LV2. 큰 수 만들기

프로그래머스 LV2. 큰 수 만들기 ✅ 이 문제는 정말 오랜기간 도전을 하여 풀어냈다. (첫 도전) 2021/08/08 (두번째 도전) 2021/11/18 (세번째 도전) 2022/04/13 알고리즘 공부하다가 귀찮아서 계속 미뤘고, 자꾸 미루다가 결국 해야할 것 같아서 풀어냄! 이거 머릿속으로는 이해가 되는데, 구현하기가 너무 어려웠다. ✅ 첫 도전 첫 도전에서의 코드 아래 사진을 보면 알겠지만 시간 초과로 fail // // main.swift // algorithm // // Created by Hamlit Jason on 2021/08/08. // /* 큰 수 만들기 https://programmers.co.kr/learn/courses/30/lessons/42883 실패 */ import Fou..

[Swift] 프로그래머스 LV2. 쿼드 압축 후 개수 세기

프로그래머스 LV2. 쿼드 압축 후 개수 세기 ✅ 문제를 보자마자 재귀로 해야한다고 생각이 들었음. 예전에 학교 수업에서 자료구조 알고리즘 시간에 divide and conquer로 문제를 풀었던 기억이 있는데, 그래서 이를 활용함. 근데 그때는 작은 문제에서 큰 문제로 갔었고, 이번에는 큰 문제에서 작은 문제로 내려가야 했음. ✅ 코드 // https://programmers.co.kr/learn/courses/30/lessons/68936 import Foundation struct p68936 { static func run() { print(p68936.solution([[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]])) // [4,9] } static var zeroCo..