일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코코아 인터널스
- 디자인패턴
- Algorithm
- 개발
- Swift
- World
- Design Pattern
- IOS
- development
- Tistory
- boostcamp
- ios #swift #uialertcontroller #메서드 스위즐링
- OS
- SwiftUI
- Opensource
- 알고리즘
- Hello
- 후기
- 네이버 부캠
- 커스텀 뷰
- Cocoa Internals
- notion
- 부트캠프
- WWDC
- 단위 테스트
- rxswift
- 부스트캠프
- Today
- Total
목록전체 글 (51)
꿈돌이랜드
스위프트에서 리스트를 뒤집는 것은 Swift Standard Library의 .reversed() 를 활용할 수 있다. 놀랍게도 이 메서드는 시간복잡도가 O(1)이다. 왜냐하면 이건 lazy이고, 원래 컬렉션을 거꾸로 뒤집는 뷰를 생성하기만 하기 때문이다. 정확히 말하자면 ReverseCollection이라는 래핑객체를 반환한다. 따라서 우리는 O(n) 시간 복잡도로 리스트를 순회할 수 있게된다. 하지만 이것을 인덱스로 접근하면 O(1)이라는 시간복잡도를 잃게된다. let arr = [1, 2, 3, 4] let i = arr.reversed()[1] // lose O(1) efficiency. 먼저 알아둘 것은, reversed() 메서드는 구체적으로 다음 두가지 정의 중에 선택하여 오버로드 된다는 점..
지난번 글의 Responder Chain과 연관해서 알아두어야 할 hitTest 입니다.애플 문서를 기반으로 작성했습니다. hitTest(_:with)UIView의 인스턴스 메서드입니다.자신을 포함한 현재 뷰의 뷰 계층에서 지정된 point를 포함하는 가장 먼 자손을 리턴합니다.func hitTest( _ point: CGPoint, with event: UIEvent? ) -> UIView?point: 뷰의 로컬 좌표계에 있는 지점event: 이 메서드에 대한 호출을 보장하는 이벤트. 이벤트 처리 코드 외부에서 이 메서드를 호출하면 nil을 반환합니다. 반환값현재 뷰의 가장 먼 하위 뷰이며 point를 포함하는 뷰 객체 입니다. point가 현재 뷰의 뷰 계층 구조 외부에 있는 경우 nil을 반환합니다..
본 포스트는 애플 공식 문서를 기반으로 작성했습니다.UIResponder이벤트를 핸들링하고 처리하기 위한 추상 인터페이스 입니다. Responder란 이벤트를 핸들링하고 이벤트에 반응할 수 있는 객체입니다. Responder 객체는 UIKit로 이뤄진 앱의 이벤트 핸들링 뼈대를 이룹니다. 많은 핵심 오브젝트는 또한 UIApplication 객체, UIViewController 객체, UIWindow를 포함한 UIView 객체 들을 포함합니다. 이벤트가 발생하면 UIKit는 핸들링 하기 위해 그것들을 앱의 responder 객체로 가져옵니다. 여러 이벤트가 있을 수 있습니다. 터치 이벤트, 모션 이벤트, 원격 제어 이벤트, 버튼 누르기 이벤트를 포함합니다. 특정 타입의 이벤트를 제어하기 위해, 리스폰더는 ..
운영체제컴퓨터 하드웨어를 관리하는 소프트웨어사용자와 하드웨어 사이의 중재자CPU, 메모리, 입출력 장치등의 자원을 적절하게 프로그램에 할당할 책임 (하드웨어 자원 관리) 운영체제를 공부하는 이유? 거의 모든 코드가 운영체제 위에서 실행되므로 운영체제 작동방식에 대한 지식은 적절하고, 효율적이며, 효과적이며, 안전한 프로그래밍에 중요하기 때문 컴퓨터 시스템의 구성현대 범용 컴퓨터 시스템은 하나 이상의 CPU와 구성요소, 공유 메모리 사이의 액세스를 제공하는 공통 버스를 통해 연결된 여러 장치 컨트롤러로 구성일반적으로 운영체제에는 각 장치 컨트롤러마다 장치 드라이버가 존재인터럽트장치 컨트롤러가 CPU에게 작업이 완료, 혹은 오류가 발생되었다는 사실을 알리는 등 많은 목적으로 사용되는 운영체제와 하드웨어 사이..

그래프 최단 경로 찾기 문제 유형PS에서 최단 경로 문제는 다음과 같은 종류로 나눌 수 있다.단일 출발 - 단일 도착 최단 경로그래프 내 특정 노드 A에서 출발해서, 다른 특정 노드 B에 도착하는 가장 짧은 경로를 찾는 문제위와 같은 가중치 그래프가 주어졌을 때, A-F 간 최단 경로를 찾는 경우가 이에 해당한다.단일 출발 최단 경로그래프 내 특정 노드 A에서 출발해서, 그래프에 존재하는 모든 노드들에 대한 가장 짧은 경로를 찾는 문제그래프 내 가중치들이 음수가 아닌 경우에 다익스트라 알고리즘을 사용한다전체 쌍(all pair) 최단 경로그래프 내 모든 노드 쌍들에 대한 최단 경로를 찾는 문제플로이드 와샬 등의 알고리즘을 사용 다익스트라 알고리즘시작 노드를 기준으로 하여 연결되어 있는 노드들을 추가하며 ..
씨밋을 개발하면서 가장 애먹은 부분 중 하나는 약속 신청 화면들이었다.언뜻? 보면 별거 아닌 화면 같다. 그냥 UISearchBar 이용하고, UITextField, UITextView 이용해서 입력창을 구현하고 각 입력창에 모든 값이 입력되어 있으면 다음 버튼을 활성화 시키고 색을 변환시키면 될테니까.하지만 저 상단의 검색창을 구현하는 일이 만만치 않았다....위처럼, 입력 도중에 연관 검색어 기능 처럼 본인의 친구 목록에서 지금까지 입력한 글자에 매치되는 친구목록을 보여줘야 하며, 그중 하나를 선택할 경우 칩셋(토큰)의 형태로 검색창에 박혀야 했다. 그리고 칩셋의 X는 버튼으로 작동해서, 누를 경우 해당 이름은 삭제되어야 한다.처음엔 위 검색창을 어떤식으로 구현할 지에 대해 팀원들과 논의가 많았었다...
Swift로 우선순위 큐를 구현하려면 직접 힙을 구현해야한다. 여기 Swift로 구현한 힙이 있습니다. 찾은 자료중 가장 깔끔한것 같아요.final class Heap { private var nodes: [T] = [] private let sort: (T, T) -> Bool init(sort: @escaping ((T, T) -> Bool)) { self.sort = sort } var isEmpty: Bool { nodes.isEmpty } func insert(_ data: T) { var index = nodes.count nodes.append(data) while index >= 0, sort(nodes[index], nodes[(index-1) / 2]) { nodes.swapAt(ind..

플로이드 와샬 그래프 문제에서 자주 출제되는 문제 유형. 그래프 유형에서 크루스칼과 플로이드 와샬이 대표적인 그리디 알고리즘 크루스칼 → 최소 간선을 싸이클 없이 더해가면서 최소 비용을 찾는과정 (한 정점에서 다른 정점으로 가는 최단거리) 플로이드 와샬 → 현재 노드의 최솟값을 지정할 때 현재 값과 다른 경로로 왔을 때의 최솟값을 비교해서 대입하는 방식 (모든 정점에서 다른 정점으로 가는 최단거리) 이런 그래프에서 1에서 5까지 가는 경우를 생각해보면 1-2-3-5 : 5코스트 1-2-5: 3코스트 플로이드 와샬은 이런 경우에 유용함! 코드 형태 func floydWarshall() { for i in 0..