일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RxSwift요약
- CI/CD
- AI
- IOS
- gitlab
- Autolayout
- cleanarchitecture
- CICD
- 알고리즘
- swift
- apple intelligence
- Content Compression Resistance priority
- gitlabci/cd
- 동작과정
- 애플인텔리전스
- 동시성프로그래밍
- swift알고리즘
- ai expo
- 백준
- mvvm
- Content Hugging priority
- RxCocoa
- OperationQueue
- LLM
- ReactiveX
- 오토레이아웃
- rxswift
- 클린아키텍처
- Union-Find
- 자료구조
- Today
- Total
목록알고리즘 및 자료구조 (14)
JosephCha의 개발일지
백준 문제 링크: https://www.acmicpc.net/problem/1543 1543번: 문서 검색 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한 www.acmicpc.net 입력 첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다. 출력 첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다. 예제 입력 1 복사 ababababa aba 예제 출력 1 복사 2 예제 입력 2 복사 a a a a a a a 예제 출력 2 복..
https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net Union-Find 알고리즘을 사용하여 풀어야 하는데, Union-Find 알고리즘은 원소들의 연결 여부를 확인하는 알고리즘이다. Find 함수 : 파라미터의 루트 부모를 찾음 (재귀로 찾음) Union 함수 : 오른쪽 파라미터의 루트 부모를 왼쪽의 루트 부모로 만듬 (즉 왼쪽 루트 부모가 제일 최강 루트 부모가 되는것) 친구 관계가 생길때마다 네트워크 수는 Union함수가 호출될때마다..

let n = Int(readLine()!)! var count: Int = 1 var stack: [Int] = [] var result: [String] = [] var isNo = false for _ in 0..

let firstLineInput = readLine()!.split(separator: " ").map{Int(String($0))!} let secondLineInput = readLine()!.split(separator: " ").map{Int(String($0))!} let limit: Int = firstLineInput.last! let length: Int = secondLineInput.count var result: Int = 0 for i in 0..

let input = readLine()!.split(separator: " ") if input == input.sorted() { print("ascending") } else if input == input.sorted(by: >) { print("descending") } else { print("mixed") } 설명 ascending일 경우는 즉 오름차수로 정렬된 상태 dscending일 경우는 즉 내림차수로 정렬된 상태 나머지는 mixed 참고: https://www.acmicpc.net/problem/2920
정의 줄을 서는 행위와 유사 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조 음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일 참고 Enqueue: 큐에 데이터를 넣는 기능 Dequeue: 큐에서 데이터를 꺼내는 기능 struct Queue { private var queue: [T?] = [] private var head: Int = 0 public var count: Int { return queue.count } public var isEmpty: Bool { return queue.isEmpty } public mutating func enqueue(_ element: T) { queue.append(element) } public mutating func de..
정의 스택은 LIFO(Last In, Fisrt Out) 또는 FILO(First In, Last Out) 데이터 관리 방식을 따름 LIFO: 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책 장단점 장점 구조가 단순해서, 구현이 쉽다. 데이터 저장/읽기 속도가 빠르다. 단점 (일반적인 스택 구현시) 데이터 최대 갯수를 미리 정해야 한다. 저장 공간의 낭비가 발생할 수 있음 미리 최대 갯수만큼 저장 공간을 확보해야 함 struct Stack { private var stack: [T] = [] public var count: Int { return stack.count } public var isEmpty: Bool { return stack.isEmpty } public mutating fu..
분할 정복 알고리즘 정의 분할 정복 알고리즘 (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..