일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Autolayout
- RxCocoa
- mvvm
- ReactiveX
- CI/CD
- 동작과정
- 오토레이아웃
- Content Compression Resistance priority
- IOS
- cleanarchitecture
- apple intelligence
- AI
- 클린아키텍처
- 알고리즘
- Content Hugging priority
- 자료구조
- CICD
- rxswift
- 백준
- ai expo
- 애플인텔리전스
- gitlabci/cd
- Union-Find
- swift알고리즘
- gitlab
- RxSwift요약
- 동시성프로그래밍
- LLM
- OperationQueue
- swift
- Today
- Total
목록분류 전체보기 (29)
JosephCha의 개발일지
분할 정복 알고리즘 정의 분할 정복 알고리즘 (Divide and Conquer) Divide: 문제를 하나 또는 둘 이상으로 나눈다. Conquer: 나눠진 문제가 충분히 작고, 해결이 가능하다면 해결하고, 그렇지 않다면 다시 나눈다. 이진 탐색 정의 Divide: 배열을 두 개의 서브 배열로 나눈다. Conquer 검색할 숫자 (search) > 중간값 이면, 뒷 부분의 서브 배열에서 검색할 숫자를 찾는다. 검색할 숫자 (search) Bool { if dataArray.count == 1 && dataArray[0] == sea..
정의 정렬할 배열을 절반으로 잘라 비슷한 크기의 두 부분의 배열로 나눈다. (split) 각 부분 배열을 재귀적으로 합병 정렬을 이용해 정렬한다. 두 부분 배열을 다시 하나의 정렬된 배열로 합병한다. // 병합정렬 func merge(left: [Int], right: [Int]) -> [Int]{ var merged = [Int]() var leftPoint = 0 var rightPoint = 0 // case1 - left/right 둘다 있을때 while left.count > leftPoint && right.count > rightPoint { if left[leftPoint] > right[rightPoint] { merged.append(right[rightPoint]) rightPoint..

정의 입력 크기가 작은 부분 문제들을 해결한 후, 해당 부분의 답을 이용해, 전체 크기의 문제를 해결하는 알고리즘 상향식 접근법 Memoization 기법: 프로그램 실행 시, 이전에 계산한 값을 저장하여, 다시 계산하지 않도록 하여 전체 실행 속도를 빠르게 하는 기술 피보나치 수열 피보나치 수열 문제 재귀함수 활용 // recursive func fibo(_ num: Int) -> Int { if num Int { var caches = [Int].init(repeating: 0, count: num + 1) caches[0] = 0 caches[1] = 1 for index in 2...num { caches[index] = caches[index-1] + caches[index - 2] } retu..
선택 정렬 (selection sort) 이란? 다음과 같은 순서를 반복하며 정렬하는 알고리즘 주어진 데이터 중, 최소값을 찾음 해당 최소값을 데이터 맨 앞에 위치한 값과 교체함 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복함 func SelectionSort(unSortedArray: [Int]) -> [Int] { var unSortedArray = unSortedArray for index in 0..
삽입 정렬 (insertion sort) 란 삽입 정렬은 두 번째 인덱스부터 시작 해당 인덱스(key 값) 앞에 있는 데이터(B)부터 비교해서 key 값이 더 작으면, B값을 뒤 인덱스로 복사 이를 key 값이 더 큰 데이터를 만날때까지 반복, 그리고 큰 데이터를 만난 위치 바로 뒤에 key 값을 이동 func insertionSort(unSortedArray: [Int]) -> [Int] { var unSortedArray = unSortedArray for index in 0.. unSortedArray[index2] { let temp = unSortedArray[index2] unSortedArray[index2] = unSortedArray[index2-1] unSortedArray[index2..
버블정렬(bubble sort)이란? 두 인접한 데이터를 비교해서, 앞에 있는 데이터가 뒤에 있는 데이터보다 크면, 자리를 바꾸는 정렬 알고리즘 데이터가 네 개 일때, 예시 ex) unSortedArray = [1, 9, 3, 2] 1차 로직 적용 1 와 9 비교, 자리바꿈없음 [1, 9, 3, 2] 9 와 3 비교, 자리바꿈 [1, 3, 9, 2] 9 와 2 비교, 자리바꿈 [1, 3, 2, 9] 2차 로직 적용 1 와 3 비교, 자리바꿈없음 [1, 3, 2, 9] 3 과 2 비교, 자리바꿈 [1, 2, 3, 9] 3 와 9 비교, 자리바꿈없음 [1, 2, 3, 9] 3차 로직 적용 1 과 2 비교, 자리바꿈없음 [1, 2, 3, 9] 2 과 3 비교, 자리바꿈없음 [1, 2, 3, 9] 3 과 9 비..

Content Hugging priority 1~3번 모두 해당 시 필요한 우선도 1. 컴포넌트(ex. UILabel)들의 Width 제약과 Height 제약을 선언하지 않은 상태 2. 컴포넌트들 사이에 제약을 설정한 상태 3. 컴포넌트들에 대해, 프레임 공간이 다 채워지지 않은 상태 * 1~3번 모두 해당된다면 적어도 하나의 컴포넌트의 컨텐츠 고유 사이즈가 더 늘어나야 될 상황이다. 우선도가 낮은 컴포넌트의 사이즈가 콘텐츠 고유 사이즈보다 늘어나고, 우선도가 높은 컴포넌트는 콘텐츠 고유 사이즈보다 사이즈가 커지지 않도록 제한한다. 예시) Content Compression Resistance priority 1~3번 모두 해당 시 필요한 우선도 1. 컴포넌트(ex. UILabel)들의 Width 제약과..

우선, 디자인 패턴을 사용하는 이유 디자인 패턴이란 프로그램 개발 시, 자주 마주하는 애로 상황에 대한 일반적이고 재사용 가능한 추상화된 해결책. 쉽고, 편리하게 프로그램을 개발, 유지보수, 그리고 모든 이들과 공유하기 위한 규약. Model, View, Controller 쉽게 생각해서, MVC는 무엇(Model)을 어떻게(Controller) 보여줄(View) 것인가 입니다. Model 데이터와 관련된 객체, 데이터를 관리하는 로직(비즈니스 로직) 포함. Controller와 직접적으로 연결. KVO(Key Value Observation)를 통해, Model의 변경사항이 있을 때, Controller에게 알림. (윗 그림 참고) View와 직접적으로 연결되면 안됨. 재사용성 강조됨. 종류 데이터로 ..

https://www.acmicpc.net/problem/10872 재귀 단계 피보나치 수 역시 단순 for문으로도 구할 수 있지만, 학습을 위해 재귀를 써 봅시다. www.acmicpc.net 코드 import Foundation let a = readLine() func recursive(_ n:Int) -> Int{ if n == 0 { return 0 } else if n == 1{ return 1 } else { return n * recursive(n-1) } } let b = Int(a!) print(recursive(b!)) 설명 컴공 1학년때, 나를 괴롭히던 재귀 함수다. 팩토리얼은 해당 숫자에서 1까지의 곱을 의미한다. 무슨소린지 헷갈리니, 예시를 들자면 ex) 5!(5의 팩토리얼) -..