문제 소개 프로그래머스 - 길 찾기 게임 (이진 트리 순회 문제) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 이진 트리 순회 문제였다. 아래와 같은 트리 순회방법이 네가지가 있는데, 여기서는 전위 순회, 후위 순회를 물어보는 문제였다. 예를 들면 [5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2] 같은 노드가 주어진다면 아래와 같은 이진 트리가 만들어지고, 전위 순회, 후위 순회가 [[7, 4, 6, 9, 1, 8, 5, 2, 3], [9, 6, 5, 8, 1, 4, 3, 2, 7]] 형태로..
아래와 같은 백준 문제를 풀다가 파라메트릭 서치라는 알고리즘을 알게 되었다. 이에 관해서 정리하려고 한다. 문제 요약 1654번: 랜선 자르기첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제를 간단히 요약하자면 주어진 K개의 랜선으로 N개를 만들 수 있는 랜선의 최대 길이를 구하는 문제이다. 예시를 들면 [802, 743, 457, 539] 로 4개의 랜선의 길이가 주어지고 이 랜선들로 11개의 랜선을 만들 수 있는 랜선의 최대 길이를 구하는 문제인 것이다. 처음 문제 풀이아래처럼 아주 간단하게 랜선의..
반복문으로 순열 (Permuation) 구하기순열이란 n개의 원소에서 r 개를 뽑아 순서를 구분하여 나열한 경우 (nPr) 이다. 만약 r 이 정해져 있다면 아래처럼 r 번의 반복문으로 구할 수 있다. 3개를 뽑는 경우를 고려하여 3번 반복문을 사용하기 때문에 시간복잡도는 O(n^3) 이다.func permutations(_ array: [T]) -> [[T]] { var permutationArray: [[T]] = [] for i in 0..위의 코드의 단점위의 코드의 가장 큰 단점은 r 에 대해서 자유롭지 않다는 점이다. 4개를 뽑는다면 반복문을 하나더 넣어줘야 한다. 그렇기 때문에 재귀함수를 사용하여 r 에 대응할 수 있게 만들 수 있다. 재귀 함수를 활용하여 순열 (Permuation..
재귀 함수를 활용한 경우팩토리얼 구하기는 아마 재귀함수의 기본 중 기본이 아닐까... 생각해본다. 정수형 매개변수 n을 입력으로 받는다. 함수는 n이 0일 때 1을 반환하고, 그렇지 않은 경우에는 n에 n - 1을 곱한 값을 반환한다. 이러한 구조를 통해 팩토리얼을 재귀적으로 계산할 수 있다.func factorial(_ n: Int) -> Int { return n == 0 ? 1 : n * factorial(n - 1)} 재귀 함수에서의 주의사항재귀 함수를 사용할 때에는 종료 조건을 명확히 설정하는 것이 중요하다. 위의 코드에서는 n이 0일 때 1을 반환하여 재귀 호출이 멈추도록 만든다. 이를 통해 함수가 무한히 호출되는 것을 방지하고, 올바른 결과를 반환할 수 있다. 재귀 함수를 활용하지 않는..
새로 업데이트 된 MapKit 을 활용하여 길찾기, 네비게이션을 구현해 볼 것이다. 아래와 같이 길찾기를 하면 길찾기 결과가 맵에 보이고, 네비게이션을 누르면 네비게이션 안내가 나오게 된다. 맵 구현 Map { } 으로 맵을 간단하게 구현할 수 있다. 시작점, 도착점을 CLLocationCoordinate2D 형식으로 넣어준다. MKRoute 형식의 route 라는 변수도 만들어 준다. import SwiftUI import MapKit struct ContentView: View { @State private var route: MKRoute? @State private var name = "" @State private var time = 0.0 @State private var distance = ..
개발을 하다보면 아래와 같이 스크롤의 상태, 스크롤된 정도를 추적하고 싶을 때가 있다. Swift 개발을 하다보면 NavigationTitle 의 경우가 이렇게 스크롤을 추적하여 상단 툴바에 Title 을 표시해준다. 다양한 인터렉션을 위해서 스크롤의 정도를 추적하고 싶다면... 세가지 방법을 소개하겠다 :) 1. PreferenceKey 와 View extension 활용 아래와 같은 코드를 작성해주면 된다. PreferenceKey 는 하위뷰에서 상위뷰로 값을 전달해주고 싶을 때 사용하게 된다. import SwiftUI struct ScrollOffsetPreferenceKey: PreferenceKey { static var defaultValue: CGPoint = .zero static fun..
이전 글 [StoreKit] 인앱결제 구현하기 1 - 기본 세팅 StoreKit 애플에서 인앱결제를 지원해주는 StoreKit 이 있다. 하지만 실제 서비스를 하는데에는 30% 라는 무시무시한 수수료를 감당해야 하기 때문에 비추하긴 하지만 간단한 결제를 쉽게 구현하기에 swift-library.tistory.com 간단하게 기본 세팅을 완료하였다. 이제 코드를 작성해볼 시간!! +_+ 1. StoreKitManager 파일 및 Class 추가 나는 StoreKitManager 라는 이름으로 파일을 만들었다. 이렇게 내가 만든 Product 를 타입으로 지정할 수 있다. import StoreKit class StoreKitManager: ObservableObject { @Published var pro..
StoreKit 애플에서 인앱결제를 지원해주는 StoreKit 이 있다. 하지만 실제 서비스를 하는데에는 30% 라는 무시무시한 수수료를 감당해야 하기 때문에 비추하긴 하지만 간단한 결제를 쉽게 구현하기에는 좋아보인다. 간단하게 인앱결제를 구현해 보기로 했다. 우선 iOS 16 버전 이상이 필요하고, StoreKit 2 를 사용하여 구현할 것이다. 1. 프로젝트 만들기 우선 나는 간단하게 프로젝트 IAPSample 이라는 앱을 만들었다. 2. 프로젝트에 In-App Purchase 추가하기 우선 인앱결제를 사용하기 위해서는 App Store Connect 와 연결된 아이디가 필요하다. 그리고 좌측 상단의 + Capability 를 눌러 In-App Purchase 를 추가해준다. 3. .StoreKit ..