본문 바로가기

분류 전체보기

(322)
99클럽 - 뒤에 있는 큰 수 찾기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 문제 자체는 이해하기 어렵지 않다. 바로 직관적으로 떠오르는 아이디어를 적용한 코드는 다음과 같다. def solution(numbers): answer = [] while numbers: target = numbers.pop(0) answer.append(next((val for val in numbers if val > target), -1)) return answer 기본 입출력은 통과했지만 테스트케이스에서는 대다수가 빨간불을 받는다. 4 ≤ numbers의 길이 ≤ 1,000,000 1 ≤ n..
99클럽 - 기능개발, 대충 만든 자판 기능개발 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 풀이 초반에는 남은 일수의 규칙성을 가지고 풀이를 시도했었다. 제시된 보기와 간단한 데이터 조작으로 규칙성이 보였기 때문인데 코테는 항상 보기만 만족해서는 답이 없다. 이후에는 예전에 풀었던 SK의 문제 중 하나인 트랙데이 문제가 생각이 나서 데이터를 과감히 음수로 보내버려 기한이 얼마나 지났는지를 하나씩 체크하는 것으로 전략을 바꿨다. 이를테면 위와 같은 방식이다. 어차피 앞의 작업이 완료되지 못하면 뒤의 작업을 먼저 내보낼 수 없으므로 가장 앞의 작업이 0 이하로 변하는 순간에 뒤완료된 ..
05. CoreData Fetch 구현하기 이전까지의 작업으로 데이터 저장은 잘 되지만 이를 확인할 방법이 없다. (솔직히 확인이 안 되니 잘 되는지도 모른다.) 확인할 수 있도록 간단한 UI와 Fetch 기능을 구현해 결과를 확인해 보도록 하자. // // ContentView.swift // ReminderApp // import SwiftUI struct HomeView: View { @FetchRequest(sortDescriptors: []) private var myListResults: FetchedResults @State private var isPresented: Bool = false var body: some View { NavigationStack { VStack { List(myListResults) { list in T..
04. 저장 기능 구현하기 이제 생성한 List를 CoreData에 저장해야 한다. MyList의 clolor attribute는 지원하지 않는 타입의 데이터를 저장하기 휘애 Transformable로 설정돼있고, 형변환을 위해 transformer가 필요하다. // // UIColorTransformer.swift // ReminderApp // import Foundation import UIKit class UIColorTransformer: ValueTransformer { override func transformedValue(_ value: Any?) -> Any? { guard let color = value as? UIColor else { return nil } do { let data = try NSKeyedAr..
03. AddNewListView 수정 및 호출 // // ContentView.swift // ReminderApp // import SwiftUI struct HomeView: View { @State private var isPresented: Bool = false var body: some View { NavigationStack { VStack { Text("Hello World") Button { isPresented = true } label: { Text("Add List") .frame(maxWidth: .infinity, alignment: .trailing) .font(.headline) } .padding() } .sheet(isPresented: $isPresented, content: { NavigationStack { Ad..
02. 새 List 추가 인터페이스 구현하기 DB에 새로운 List를 추가하기 위해 List를 추가하는 인터페이스를 작성한다. 애플의 Reminder와는 일단은 다르지만 기본적인 기능을 수행할 수 있도록 최소한으로 작성했다. // // ColorPickerView.swift // ReminderApp // import SwiftUI struct ColorPickerView: View { @Binding var selectedColor: Color let colors: [Color] = [.red, .green, .blue, .yellow, .orange, .purple] var body: some View { HStack { ForEach(colors, id: \.self) { color in ZStack { Circle().fill() .fore..
01. CoreData 설계(01) Reminder 앱을 위한 데이터로는 List와 Reminder가 존재한다. 이번엔 List를 위한 Entity를 설계하고, 이를 앱에서 사용할 수 있도록 Implement 한다. Entity 이름은 MyList이고, color와 name이라는 Attribute를 갖는다. color의 타입으로 사용할 UIColor는 CoreData에서 기본적으로 지원하지 않는 타입이기 때문에 직접 지정과 변환을 진행해 줘야 한다. 이를 위해 Codegen 설정을 Manual로 바꿔주고 color attribute의 타입을 Transformable로 설정하고, Transformer와 Custom Class를 직접 지정한다. // // MyList+CoreDataClass.swift // ReminderApp // impo..
99클럽 - 이진 변환 반복하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 프로젝트들을 진행하면서 생긴 변화는 '내장함수'의 활용이다. 직접 구현하는 것보다 덜 수고스럽고, 실제 구동 속도도 빠르다는 것이 장점이다. (아는 것이 힘이라는 거지...) 2진수와 10진수 간의 변환에는 다음의 내장 함수를 사용하면 간단하다. bin() Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed her..
Grid와 List를 함께 써보자. 애플의 앱들을 보면 한 가지 View가 아니라 여러 View를 조화롭게 사용하는 것을 확인할 수 있다. 대표적인 예로 '미리알림'앱이 그러한데 쪼개서 보면 오른쪽과 같이 LazyVGrid와 List를 함께 쓴 것을 볼 수 있다. 참 간단하고 예쁜데 구성하려면 생각만큼 만만치는 않다는 것이 문제다. 이런 비슷한 구조의 인터페이스를 JusTheme에서 사용한 적이 있는데, 이때 사용한 '억지' 방법과 최근 알게 된 조금 더 정석에 가까운 방법을 소개해 보고자 한다. 0. 모든 문제의 시작 이게 어려운 이유는 ScrollView와 LazyVGrid, ListView의 특성 때문이다. ScrollView는 자신에게 포함 된 Child들을 통해 크기를 조절하는데, LazyVGrid와 ListView는 화면 밖에 ..
앱스토어 '서드파티 SDK의 API 권한 소명' 문제 해결하기 최근 Tower Of Babel의 베타 테스트를 위해 빌드를 올린 후 위와 같은 메일을 받게 됐다. 주어진 링크와 내용을 확인해 보면 서드파티 SDK가 API를 사용하는 경우 왜 사용하는지 소명하라는 이야긴데, 작년에 개발자 대상 키노트와 커뮤니티를 통해 올해 초 이것이 필수로 적용될 것이라는 소식을 들은 바 있어 바로 대응할 수 있었다. 딱히 코드를 뒤집어 엎어야 하는 기술적인 문제는 아니고, 단순히 사용되는 API에 대해 이유만 적어주면 끝나는 부분이라 혹시나 겁을 먹고 헤맬 누군가를 위해 짧게 남겨 본다. 일단 참 친절하게도 빌드를 앱스토어 커넥트에 올리게 되면 위와 같은 메일이 바로 날아오게 된다. 해당 메일을 참고해서 작업을 진행하면 되는데, TowerOfBabel은 별 기능 없는 게임이라 Sy..