Assets 에서 Json 파일 읽기 프로젝트에서 Assets 에 포함된 Json 파일에 접근하기 위해서는 NSDataAsset 을 사용할수 있다. NSDataAsset 공식 문서의 선언 부를 보자! class NSDataAsset: NSObject 요녀석을 사용하려면 UIKit 을 import 해줘야 한다! 이녀석을 사용하면 JSON 파일을 NSData 타입으로 변환 해준다. 사용 방법 static func parse( name: String) -> Self? { guard let asset = NSDataAsset(name: name) else { return nil } let jsonData = try? JSONDecoder().decode(Self.self, from: asset.data) ret..
알고리즘 과 자료구조 여행 가방을 예시로 들어보자. 어떻게 효율적으로 물건을 더 넣을수 있을까? = 자료구조 옷등 물건들을 어떤 순서로 넣어야 할까? = 알고리즘 테트리스를 예시로 들어보자. 적절한 모양의 블럭 = 자료구조 요리조리 돌리고 옮겨서 게임 클리어 = 알고리즘 이렇기 때문에 알고리즘과 자료구조는 뗄레야 뗄수 없는관계이다. 알고리즘 문제해결을 위한 절차, 방법 어떠한 문제를 해결하기 위한 여러 동작들의 모음 시간복잡도 알고리즘이 실행되는데 소요되는 시간분석 점근 표기법(대문자 O 표기법) 예시 O(n) 알고리즘의 종류 정렬 정렬 알고리즘 중에서도 종류가 굉장히 많다. 어떤식으로 정렬할것인지 에따라 성능이 달라진다. 선택 정렬 O(n2) 버블 정렬 O(n2) 삽입 정렬 O(n2) 병합 정렬 O(n..
UIViewController UIKit 앱의 뷰 계층 구조를 관리하는 객체 UIViewController 의 class는 모든 View Controller 의 공통적인 공유 동작을 정의한다. 클래스의 인스턴스를 직접 만드는 경우는 거의 없다. 대신 뷰 컨트롤러의 뷰 계층 구조를 관리하는 데 필요한 메서드와 속성을 하위 클래스로 만들고 추가한다. 뷰 컨트롤러의 주요 역할 데이터가 변경되면 View의 화면을 변경된 값으로 업데이트한다. View 를 통해 사용자와 상호작용에 응답한다. View 에 표시될 컴포넌트? 등의 크기, 전체 인터페이스 레이아웃 관리 앱내에서 다른 View Controller 와 다른 객체의 관계를 조정한다. ViewController 는 관리하는 View 에 밀접하게 연결되어 있으며..
Singleton Pattern Singleton Pattern 이란 특정 용도로 사용될 객체 '한개만' 만들어서 여러곳에서 공용으로 사용할때 사용하는 디자인 패턴 이다. (전역 변수 같은느낌?) 사용 예시 class Malrang { static let malrang = Malrang() var name = String? var age = Int? private init() {} } 위의 예시처럼 더이상 Malrang 의 객체를 만들수 없게끔 정의하여 사용할수 있다. Malrang 타입의 객체는 새로 초기화,생성 할수없 도록 init에 접근제한을 걸어준뒤 내부에서 Malrang의 타입을 갖는 객체를 어디서든 접근하여 사용할수 있도록 static 키워드를 이용해 어디서든 malrang 이라는 프로퍼티를 ..
문제 KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다. 또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오. 입력 첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진..
문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. 이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 설정하기"이다. 이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다. 현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ulHD7/btrtLzAqJh7/7y5N5ldx2dNctSqBeDdPKK/img.png)
문제 흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다. 예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다. 점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다. 입력 첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0) 출력 점 (x, y)의 사분면 번호(1, 2,..
문제 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다. 입력 첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다. 출력 첫째 줄에 윤년이면 1, 아니면 0을 출력한다. let inputNumber = Int(readLine()!)! if inputNumber % 4 == 0 && (inputNumber % 100 != 0 || inputNu..