MLKit로 얼굴을 인식해서 필터를 씌워주는 개발중이다. 얼굴 위에 사각형을 그려주거나 점을 찍는 필터를 개발하며 iOS의 Core Graphics 를 사용하게되었다. CGFloat, CGSize 등 여러가지 CG들이 등장했는데, 이것을 한번 정리해보겠다. Core Graphics 아이폰과 아이패드에서 2차원 그래픽을 그릴 수 있도록 제공하는 그래픽 라이브러리 애플의 'Quartz'라는 그래픽 안에 포함되어 있으며 Core Graphics 외에도 Core Animation 라이브러리가 함께 존재한다. Core Graphics의 자료구조 CG를 사용해 그래픽을 그려주려면 크기나 위치 지정을 위해 계속 등장하는 CG~~들이 있다! ✔️ CGFloat Apple Developer Documentation de..
MLKit를 쓰기 위해 iOS 프로젝트에 파이어베이스를 사용 설정을 해야하는 일이 생겼다! iOS 프로젝트의 여러가지 설정에 익숙하지 않아 겁을 먹었지만 생각보다 간단했다. 또 파이어베이스를 사용하기 위해서는 안드로이드의 gradle과 같은 iOS의 pod 파일도 함께 관리해줘야한다. 일단 시작~~!~! 📌 01. Firebase 프로젝트 만들기 Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com Firebase 사이트 접속하여 로그인 후에 새 프로젝트를 만들어준다. 무료 계정은 프로젝트 개수에 제한이 있다! 📌 02. 프로젝트에 앱 등록하기 생성한 프로젝트에 원하는 플랫폼을 선택하여 ..
ViewController의 생명주기 앱에 나타나는 하나의 화면은 하나의 ViewController를 가짐 사진과 같은 구조로 호출되는 함수를 override하여 각 타이밍에 맞게 원하는 작업을 수행할 수 있음 ✔️ viewDidLoad() 뷰의 컨트롤러가 메모리에 로드되고 난 후 시스템에 의해 자동 호출되는 메소드 화면이 처음 만들어질 때 한번만 수행 리소스 초기화 또는 초기 화면 구성 등의 작업 수행 + 안드로이드의 onCreate() 같은 역할 ✔️ viewWillAppear() 뷰가 화면에 나타나기 직전 호출되는 메소드 다른 화면에 갔다가 돌아왔을 때 다시 복구 또는 실행해야하는 작업 수행 + 안드로이드의 onResume() 같은 역할 ✔️ viewDidAppear() 뷰가 화면에 나타난 후 실행..
iOS 앱의 5가지 생명주기 Not Running App이 아직 실행되지 않았거나 완전히 종료된 상태 Inactive(Foreground) App이 실행되고 있어 foreground에 있지만 이벤트를 받지 않는 상태 Active 상태로 넘어가기 전에 잠시동안 머무른다 ex) 미리알림 등의 alert가 올라와 앱이 실질적으로 이벤트를 받지 못하는 상황 Active(Foreground) App이 실행되고 있어 foreground에 있고 이벤트가 발생한 상태 일반적으로 앱이 돌아가는 상태 Background App이 background 상태에 있으나 실행되고 있는 코드가 있는 상태 Background 상태로 실행되는 app은 inactive 대신 background 상태로 진입 Suspended 상태로 넘어가..
문제 그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하는 프로그램을 작성하시오. 최소 스패닝 트리는, 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리를 말한다. 입력 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 가중치 C인 간선으로 연결되어 있다는 의미이다. C는 음수일 수도 있으며, 절댓값이 1,000,000을 넘지 않는다. 그래프의 정점은 1번부터 V번까지 번호가 매겨져 있고, 임의의 두 정점 사이에 경로가 있다. 최소 스패닝 트리의 가중치가 -2,147,483,..
Union-Find의 개념 서로 중복되지 않는 부분 집합 (Disjoint Set)을 표현할 때 사용하는 자료구조 초기화 / 합치기 (Union) / 찾기 (Find) 세 가지 연산을 사용한다 최소 스패닝 트리를 구현하는 크루스칼 알고리즘에 사용되며, 사이클을 만들지 않고 모든 노드를 방문할 수 있다 Union-Find의 구현 초기화 : N 개의 원소가 각각의 집합에 포함되어 있도록 초기화한다 -> 각각을 유일한 원소로 가지는 집합 생성 Union (합치기) : 두 원소 a, b 가 각각 속한 두 집합을 하나로 합친다 -> 두 개의 집합을 하나로 연결하는 역할 Find (찾기) : 원소 a 가 주어질 때, 이 원소가 속한 집합을 루트노드를 반환한다 -> a가 어느 집합에 속해있는지 찾는 역할 //초기화 ..
문제 코딩테스트 연습 - 트리 트리오 중간값 5 [[1,5],[2,5],[3,5],[4,5]] 2 programmers.co.kr 풀이 임의의 노드 1로부터 가장 먼 노드 A를 찾는다. A로부터 각 노드까지의 거리를 찾는다 이 때 가장 먼 거리의 노드가 여러개라면 A노드와 먼 노드 중 2개를 선택하면 되므로 가장 먼 거리 리턴 가장 먼 거리의 노드가 B 하나라면 다시 B 를 기준으로 탐색 B로부터 각 노드까지의 거리를 찾는다 이 때 역시 가장 먼 거리의 노드가 여러개라면 B노드와 먼 노드 중 2개를 선택하면 되므로 가장 먼 거리 리턴 가장 먼 거리의 노드가 A 하나라면 A와 B의 거리(트리의 지름)-1을 리턴 위와 같은 입력의 경우 2-1에서 리턴이 된다. 노드 1에서 가장 먼 노드는 3이고, 3은 1,..
문제 트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오. 입력 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2≤V≤100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. (정점 번호는 1부터 V까지 매겨져 있다고 생각한다) 먼저 정점 번호가 주어지고, 이어서 연결된 간선의 정보를 의미하는 정수가 두 개씩 주어지는데, 하나는 정점번호, 다른 하나는 그 정점까지의 거리이다. 예를 들어 네 번째 줄의 경우 정점 3은 정점 1과 거리가 2인 간선으로 연결되어 있고, 정점 4와는 거리가 3인 간선으로 연결되어 있는 것을 보여준다. 각 줄의 마지막에는 -1이 입력으로 주어진다..