swift 42

[Swift] Optional

[Swift] Optional Optional 은 해당 변수가 어떤 타입의 값을 가지고 있을 수도 있고, 혹은 nil 을 가지고 있을 수도 있다는 의미입니다. Optional 의 구현부를 살펴보면 위와 같이 none 과 some(Wrapped) 라는 case 를 가진 열거형으로 구현되어 있습니다. none 일 경우 nil 을 가지게 될 것이고, some(Wrapped) 는 Wrapping 된 어떠한 값을 가지고 있게 될 것입니다. HTML 삽입 미리보기할 수 없는 소스 Optional 은 위처럼 두가지 방법으로 선언할 수 있지만, 대부분의 경우 타입 뒤에 ? 를 붙이는 방식을 선호하는 것 같습니다. Optional 은 초기값을 할당해주지 않으면 nil 로 초기화됩니다. Optional 을 상수로 선언할 ..

iOS 개발/Swift 2022.07.04

[iOS] UINavigationController

[iOS] UINavigationController Navigation Controller 는 1개 이상의 자식 View Controller 를 관리하는 컨테이너 View Controller 입니다. 한번에 하나의 자식 View Controller 만 화면에 나타낼 수 있으며, View Controller 에서 아이템을 선택하면 애니메이션을 이용해 새로운 View Controller 을 화면에 표시하고, 원래 화면에 존재하던 View Controller 는 가려지게 됩니다. 화면 상단의 Navigation Bar 에 있는 Back 버튼을 누른다면 현재 표시되고 있는 View Controller 는 화면에서 제거되고 그 아래 있던 View Controller 가 표시됩니다. Navigation Stack ..

iOS 개발/iOS 2022.06.30

[iOS] 앱 생명주기 (App LifeCycle)

[iOS] 앱 생명주기 (App LifeCycle) 생명주기란, 앱이 최초 실행될 때부터 앱이 종료될때까지의 주기를 뜻하며, 앱은 이 주기동안 여러 상태를 가집니다. 오늘은 iOS 앱의 생명주기에 대해 알아보도록 하겠습니다. 앱의 상태 앱의 상태는 현재 수행 가능한 동작과 수행 불가능한 동작을 결정짓습니다. 예를 들어 Foreground 상태인 앱은 화면을 점유하고 있기 때문에 시스템 리소스보다 높은 우선순위를 가지고 있습니다. 반대로 Background 상태인 앱은 최소한의 작업을 수행해야 합니다. 사실 가급적이면 아무것도 하지 않는게 좋습니다. 만약 앱의 상태가 변경된다면, 앱은 그에 따라 다른 동작을 수행해야 합니다. 이러한 상태들과 생명주기는 iOS 12 까지 UIApplicationDelegat..

iOS 개발/iOS 2022.06.24

[백준] 9012.괄호 (Swift)

[백준] 9012.괄호 (Swift) https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 풀이 스택을 이용해 해결할 수 있는 간단한 문제입니다. 괄호는 무조건 한 쌍으로 이루어져야 하며 괄호가 열리면 무조건 괄호는 닫혀야 합니다. 스택을 이용해 괄호의 유효성을 판단하는것은 굉장히 간단합니다. ( 가 나오면 스택에 push 하고 ) 가 나오면 pop 하는 것이 전부입니다. 하지만 pop 할 시 스택이 비어있다면 해당 괄..

[백준] 7453.합이 0인 네 정수 (Swift)

[백준] 7453.합이 0인 네 정수 (Swift) https://www.acmicpc.net/problem/7453 7453번: 합이 0인 네 정수 첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는 정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 228이다. www.acmicpc.net 풀이 1. 나눠서 풀기 크기가 최대 4000인 배열을 4개 이용해야 하기 때문에 완전탐색을 이용한다면 시간복잡도는 O(n^4) 이 되어 절대 테스트를 통과하지 못할 것입니다. 그래서 저는 4개의 배열을 두 개씩 묶기로 했습니다. 배열 A, B 에서 나올 수 있는 모든 수의 합, 배열 C, D 에서 나올 수 있는 모든 수의 합을 ..

[iOS] Frame & Bounds

[iOS] Frame & Bounds Frame 과 Bounds 는 모두 UIView 의 CGRect 프로퍼티로 각각의 origin 과 size 를 가지고 있습니다. 얼핏 보았을때는 같은것이 아닐까 싶을수도 있지만, 오늘은 이 둘의 차이점에 대해 명확하게 알아보도록 하겠습니다. Frame 먼저 Frame 은 자신의 SuperView (상위 뷰) 의 좌표시스템에서의 위치와 크기를 나타냅니다. 이 말은 곧 자신의 SuperView 를 어떤 좌표평면으로 가정하고, 자기 자신은 해당 좌표위에 존재하는 View 라고 생각할 수 있겠죠? 예시로 가장 바깥쪽의 하얀색 영역을 First View, 안쪽의 핑크색 영역을 Second View, 그 안쪽의 노란색 영역을 ThirdView 라고 하겠습니다. 각 View 들은..

iOS 개발/iOS 2022.06.17

[백준] 18808.스티커 붙이기 (Swift)

[백준] 18808.스티커 붙이기 (Swift) https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net 풀이 1. 배열 비교 먼저 스티커 자체를 배열에 붙일 수 있는지 없는지를 확인해야 했기 때문에 스티커의 크기만큼 배열에서 인덱스를 이동하며 탐색하였습니다. 맨 처음에는 확인하려는 범위의 첫번째 인덱스, 즉 맨 좌측 상단이 1로 채워져 있으면 스티커를 붙일 수 없다고 생각했습니다. 하지만 스티커의 첫번째 인덱스는 항상 1이 아니고 0일 수도 있기 때문에..

[iOS] UITableView & UICollectionView

[iOS] UITableView & UICollectionView 앱 내에서 여러 컨텐츠를 보여주기 위해서는 리스트 형태로 출력하는것이 매우 효과적입니다. iOS 에서는 UITableView 와 UICollectionView 를 이용해 리스트 형태를 구현할 수 있는데, 오늘은 이 둘의 특징에 대해 알아보겠습니다. UITableView 단일 Column 을 가지고 Row 마다 데이터를 표시하는 View UIScrollView 를 상속받으며 수직 스크롤만 가능 Section 을 이용해 Row 들을 그룹화할 수 있음 각 Section 은 Header 와 Footer 를 옵션으로 가질 수 있음 TableView 는 계층구조의 데이터가 있는 앱에서 일반적으로 사용됩니다. TableView 와 Navigation ..

iOS 개발/iOS 2022.06.17

[Swift] GCD & Dispatch Queue

[Swift] GCD & Dispatch Queue 프로그램은 실행되며 여러가지 작업을 수행해야 하는데, 멀티스레드 프로그래밍을 이용하지 않고 하나의 스레드에서 작업을 모두 수행한다면 당연히 많은 시간이 걸릴것입니다. iOS 의 메인 스레드는 UI 를 화면에 그려주는 스레드입니다. 이 경우 화면에 UI 를 그려줘야 하는데, 단순 연산이나 네트워크 요청 등 다른 작업들을 모두 메인 스레드에서 실행한다면 앱이 버벅거릴수도 있을 것입니다. GCD (Grand Central Dispatch) 그래서 다른 스레드에서 여러 작업을 수행할 수 있도록 적절하게 분배해주는 과정이 필요합니다. 이는 동시성 프로그래밍이라고 불립니다. GCD 는 멀티코어와 멀티프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 해줍니다. ..

iOS 개발/Swift 2022.05.27

[백준] 19238.스타트 택시 (Swift)

[백준] 19238.스타트 택시 (Swift) https://www.acmicpc.net/problem/19238 19238번: 스타트 택시 첫 줄에 N, M, 그리고 초기 연료의 양이 주어진다. (2 ≤ N ≤ 20, 1 ≤ M ≤ N2, 1 ≤ 초기 연료 ≤ 500,000) 연료는 무한히 많이 담을 수 있기 때문에, 초기 연료의 양을 넘어서 충전될 수도 있다. 다 www.acmicpc.net 풀이 BFS 를 이용한 최단거리 계산 문제입니다. 같은 거리에 있는 승객이 여러명이라면 행의 크기가 가장 작은 승객을, 그마저도 여러명이라면 열의 크기가 가장 작은 승객을 태우는 것이 문제의 조건입니다. 이를 해결하기 위해서 먼저 BFS 로 모든 승객과의 거리를 계산한 후에 최소거리에 있는 승객을 추려냈습니다. ..