본문 바로가기

분류 전체보기

(83)
[프로그래머스/20년 카카오 블라인드] 자물쇠와 열쇠(Lv.3), C++ 자물쇠와 열쇠(링크) 문제에서 주어지는 key, lock 은 기껏해야 20 x 20 크기의 2차원 배열이다. 따라서 key 를 lock 위에 겹치도록 한 뒤 겹친 칸의 값을 더해보고 lock 의 모든 칸이 1 이 되었는지 확인하면 된다. 이 과정을 key 배열을 90도씩 회전해가며 모두 검사하기에도 충분한 입력이다. 아래 그림과 같이 겹치기 시작해서 아래 그림처럼 마지막 칸이 겹칠 때까지 key 배열이 lock 배열 위를 순회하도록 한다. 그림에서 볼 수 있듯이 lock 배열의 영역 밖으로 나가는 key 배열의 칸들이 있고 key 값을 lock 과 더하는 과정에서 영역 밖 위치의 접근이 일어나기 때문에 lock 배열에 padding 을 두면 편하다. padding 은 필요한 만큼만 덧붙이면 되는데 key..
[프로그래머스/20년 카카오 블라인드] 괄호 변환(Lv.2), C++ 괄호 변환(링크) 차분히 주어진 순서대로 구현하면 어렵지 않은 문제. 정수를 증감 시키며 괄호의 균형을 확인하면 편하다. 정수 변수를 두고 ( 가 나오면 증가, ) 가 나오면 감소시킨다. 변수가 음수가 된다면 ) 가 먼저 나온 것이므로 올바른 문자열이 아니고, 균형만 확인하고 싶다면 마지막에 0 이 되는지만 확인하면 된다. string solution(string p) { if (p.empty()) return p; string u = "", v = ""; int i = 0, c = 0; for (i = 0; i < p.size(); ++i) { p[i] == '(' ? ++c : --c; u += p[i]; if (c == 0) break; } v = p.substr(i + 1); bool isCorr..
[프로그래머스/20년 카카오 블라인드] 문자열 압축(Lv.2), C++ 문자열 압축(링크) 문자열의 길이가 N 일 때 1 개 단위, 2 개 단위, 3 개 단위... N / 2 개 단위로 잘라본다. (당연히 절반 이상으로 자르면 더 이상 반복되지 않으므로 압축되지 않는다.) 나머지는 단순히 문자들을 순회하며 이전의 단위 문자열과 같은 지 센다. 개수를 덧붙인 새로운 문자열을 만드는 것 보다 경우에 따라 길이값을 늘려가며 정수 길이값 정답을 찾는게 더 효율적이다. 예를 들어 1 개 단위로 자르고 문자열이 aaabbb 라면 a 3 개를 확인한 시점에 개수를 센 정수 변수의 자릿수( = 1) + 단위( = 1) 를 정답에 더하는 식이다. 자릿수를 더하는 이유는 만약 a 가 17 개라면 2 자리만큼 압축된 문자열이 늘어나는 것이므로 자릿수를 더해야 한다. // 정수 n 을 받으면 자..
[iOS] GCD, 비동기 프로그래밍 참고 자료 Apple 공식 문서 Dispatch Apple 공식 문서 DispatchQueue Stackoverflow GCD 관련 Apple 공식 문서 Concurrency Programming Guide 목차 (눌러서 이동) 비동기 프로그래밍, Grand Central Dispatch(GCD) Apple 의 UI 는 Main thread 에서만 업데이트 되도록 디자인되어 있다. UIKit 가 thread-safe 하지 않아 Main thread 에서 순차적으로 처리하는 것이 안정적이기 때문이다. (UIKit 가 thread-safe 하지 않은 이유.) Main thread 가 UI 를 업데이트 할 동안 네트워킹과 같은 무거운 작업들을 다른 thread 에서 동시에 작업할 수 있다면 앱 성능 향상에 효..
LINE iOS 앱 개발 관련 (21년 5월) 라인 개발자가 말하는 대규모 iOS 앱 개발 썰 | 라인개발실록 라인 iOS 개발자에게 무엇이든 물어보세요 | 라인개발실록 Swift, Objective-C 코드의 비율? 새로운 코드는 모두 Swift 로 작성하고 있고 모듈화 과정에서 나머지 코드도 자연스럽게 변경되어 약 80% 정도가 Swift 코드화 됨. Objective-C 보다 빌드 속도는 느리다. 현재도 실제 서비스 코드에 Objective-C, Swift 모두가 사용되고 있는 것 이기 때문에 둘 다 이해할 수 있다면 좋다. LINE 앱을 최적화하기 위한 노력? 앱의 binary 사이즈를 줄이기 위해 필요없는 resources 를 주기적으로 지우고 downloadable 하게 만든다. 빌드 속도 개선을 위해 모듈화에 신경쓰고, 서로에 대한 de..
[iOS] AppDelegate, SceneDelegate 의 역할, WWDC2019 (iOS 13~) 참고자료 WWDC2019 목차 (눌러서 이동) iOS 13 이전의 App Delegate iOS 13 이전의 App Delegate 는 Process level 의 App event 를 관리 (App Launched) 하거나, App 의 UI Status 를 관리(Entered Foreground)했다. 이전에는 App 이 하나의 Process 와 이를 표현하기 위한 하나의 UI 를 가졌었다. 하지만, iOS 13 부터 하나의 Process 에 대해 여러 UI 객체를 (Scene Session 이라고 부른다.) 가질 수 있게 되어 UI 에 대한 책임을 Scene Delegate class 로 분리한다. App Delegate & Scene Delegate App Delegate 는 이전처럼 App p..
[iOS/Swift] Initializer 정리 (Swift 공식 문서) https://docs.swift.org/swift-book/LanguageGuide/Initialization.html Initialization — The Swift Programming Language (Swift 5.5) Initialization Initialization is the process of preparing an instance of a class, structure, or enumeration for use. This process involves setting an initial value for each stored property on that instance and performing any other setup or initialization t docs.swift.or..
FLO Music App - 재생 목록 화면 (Custom Cell) 목차 (눌러서 이동) Custom Cell 작성 먼저 Test class 작성의 대략적인 순서를 파악하기 위해 필요한 것을 나열해보자. 1. MusicCell class 가 필요. (identifier property 를 가져야 함.) 2. 각 UI Components 를 원하는 Configuration 을 부여하며 선언하고 Cell 의 Content View 에 올리기. 3. 원하는 Cell 형태에 맞게 각 UI Components 의 Constraints 작성. 4. cellForRowAt indexPath 함수에서 호출해 Cell 내용을 채울 수 있게하는 함수 작성. ( configureCell( ) ) Custom Cell class 작성 먼저 MusicCell 이란 이름으로 Custom cell..