![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/llutV/btrm2orA4Qu/9QQMabHFz5qi6yOY5thbo0/img.png)
클래스 싱글톤과 구조체 싱글톤을 차이점을 알아보겠습니다. 비교를 하기 위해 먼저 클래스 싱글톤을 만들어줍니다. private init()을 해준 이유는 https://hyerios.tistory.com/23 해당 포스팅에서도 언급했지만 다른 곳에서 또 다른 인스턴스를 생성하지 못하도록 하기 위함입니다. (싱글톤 특성) 그리고 value변수를 생성하고 0으로 초기화해줍니다. currentValue함수를 생성해 현재 value값을 출력해주도록 합니다. class ClassSingleton { static let shared = ClassSingleton() private init() {} var value = 0 func currentValue() { print("class Singleton: \(value..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/KlR25/btrlKf4DpAk/8phG70GwBFo8kJ9UA8BSpk/img.png)
알고리즘 문제 풀면서 성능 비교하는 건 아주 중요하죠! 애용하는 LeetCode(https://leetcode.com)는 사이트 자체에서 런타임 소요 시간과 메모리 사용량을 보여주지만, LeetCode에 제출하지 않고 알고리즘 성능 비교할 때는 아래 코드를 사용합니다. struct AlgoTimer { private var startTime: TimeInterval = 0.0 private var endTime: TimeInterval = 0.0 // 타이머 시작 mutating func start() { startTime = NSDate().timeIntervalSince1970 } // 타이머 멈춤 mutating func stop() -> TimeInterval { endTime = NSDate()..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bDK9B0/btrlFJ5kaCk/gvEt867KK3zXvvkO4NE0K1/img.png)
오늘은 648번을 풀어보겠습니다. 중간 난이도고 61.0%의 성공률을 보입니다. 그럼 시작 영어에서는 root라는 개념이 있습니다. 이 루트 뒤에 successor가 따라와 더 긴 단어가 될 수 있습니다. 예를 들어 root인 an와 그 뒤에 successor other이 붙으면 새로운 단어 another이 됩니다. 루트들로 구성된 딕셔너리가 주어지고 공백에 따라 분리되는 단어로 구성된 sentence를 root로 바꿔 재구성을 하면 됩니다. 만약 successor가 하나 이상의 root와 교체될 수 있다면 가장 짧은걸 root로 사용하면 됩니다. 즉 sentence안에 successors들이 있는 거고 root로 바꿀 수 있으면 바꾸어 문장을 재구성을 하면 됩니다. 여러 개의 root로 바꿀 수 있다면..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cXDGjl/btrkAvfrxdn/Rtutg6Pnaz6M4HHzEYR7SK/img.png)
오늘은 83번 문제를 풀어보겠습니다. EASY고 현재는 47.9%의 성공률을 보이네요. 오늘 주제는 Linked List입니다. 정렬된 링크드 리스트의 헤드가 주어지면, 중복되는 것들을 지워서 각 원소들이 한 번씩만 나타나게 해라. 주어진 예시들을 보겠습니다. 1번 예시를 보면, 1이 2번 나왔잖아요. 그래서 1노드 한 개를 지워줍니다. 지운 결과는 [1,2]이 됩니다. 2번 예시를 보면, 1이 2번 2가 1번, 3이 2번 나왔습니다. 그럼 1노드 1개 지워주고 3노드 1개 지워줘야겠죠. 지운 결과는 [1,2,3]이 됩니다. 문제에서 주어진 제약조건들을 살펴보면 노드의 수, node의 value값, 정렬 보장이 적혀있네요. 마지막 문장이 가장 눈에 띄네요. 일단 정렬이 보장되니까 이 문제는 쉽게 접근할 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bDnWKq/btrhTtRZCrE/HVPPT5L0DRkFR9G2AFkoC1/img.png)
이것도 일하다가 발견한 ^^,,, 신기한 것 (아래 코드는 바로 직전 포스트 한 코드 재탕) class ViewController: UIViewController { private let slider: UISlider = { let slider: UISlider = UISlider() slider.translatesAutoresizingMaskIntoConstraints = false slider.minimumValue = 0 slider.maximumValue = 100 slider.value = 0 slider.addTarget(self, action: #selector(sliderValueChanged(sender:)), for: .valueChanged) return slider }() overr..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cILAgb/btrhSMqEhZv/CX4AXQOq5ICGSfjQMMewy1/img.png)
일하다가 발견한 버그...? 일단 UISlider를 사용해야 했는데 어떠한 상황에 따라 UIControl의 isEnabled속성을 건드려야 했음. (참고로 UIControl은 UIView를 상속한 사용자의 의도를 전달하는 시각적인 요소들의 기반이 되는 클래스이고 UIButton, UISlider 등이 UIControl클래스를 상속해서 사용되고 있음) 오늘 사용해볼 프로퍼티 isEnabled isEnabled프로퍼티는 디폴트는 YES이고 만약 NO로 설정하면 터치 이벤트를 무시하고 서브클래스들은 다르게 그려질 거임. 일단 여기까지 오케이. 1. isEnabled 컨트롤이 활성화 상태인지를 나타내는 BOOL값이고 {get set}이라 직접적으로 수정 가능한 프로퍼티임. 이 값을 true로 설정하면 컨트롤 활..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/NXihz/btrfDiebIXp/yIG98TKoc1Khs5kIiBxGp1/img.png)
MPEG은 Moving Picture Experts Group의 약자입니다. MPEG 엠펙으로 불리고 있죠! 즉 전 세계의 정보 기술 표준을 정하는 ISO/IEC의 산하기관인 동화상 전문가 그룹입니다. MPEG 시스템은 위 그룹이 제정한 표준안으로 MPEG 뒤 숫자나 알파벳을 이용합니다. MPEG-1 ISO/IEC MPEG에서 처음으로 정한 표준으로 CD와 같은 매체에 동영상을 압축해 저장하기 위한 코덱으로 개발되었습니다. 표준 해상도는 352x240, 30프레임/초이며, CD 1장에 74분의 영상을 담을 수 있습니다. MPEG-1은 개발 당시 낮은 해상도의 비디오를 낮은 전송률로 압축하는 것에 집중해 개발되었습니다. 그렇기 때문에 네트워크 혹은 방송망을 사용한 전송 환경은 고려되지 않아 전송 과정에서 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ddbmcj/btrduT1SBbu/xzDoeCMbTleblSgxl61nDk/img.png)
오늘은 18번 문제를 풀어보겠습니다. 중간 난이도고 36.5%의 성공률을 보이네요. 오늘 주제는 Two Pointers입니다. n정수들로 구성된 nums배열이 주어지면, nums[a], nums[b], nums[c], nums[d]는 a,b,c,d는 0이상 n미만이고 a,b,c,d는 별개이고 nums[a], nums[b], nums[c], nums[d]의 합이 target과 같은 유니크한 quadruplets의 배열을 리턴하세요. 순서는 상관없습니다. 예시를 보겠습니다. 1번을 보면 아웃풋으로 나온 각 1차 배열들의 원소를 합치면 타깃이 됩니다. -2 + -1 + 1 + 2 = 0 -2 + 0 + 0 + 2 = 0 -1 + 0 + 0 + 1 = 0 이렇게 타깃으로 되는 배열을 만들어서 리턴해주면 됩니다...
- Total
- Today
- Yesterday
- stanford SwiftUI
- 책 후기
- Algorithm
- swiftUI
- objective-c
- 애니메이션
- 딥러닝
- leetcode
- rxswift
- Animation
- 책
- 스위프트
- 문자열
- SWIFT
- 독서
- RX
- swift5
- Deep learning
- iOS SwiftUI
- string
- 머신러닝
- 책 추천
- ReactiveX
- objc
- ARC
- 스위프트UI
- 알고리즘
- wwdc
- ios
- Xcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |