본문 바로가기

분류 전체보기

(207)
프로그래머스 - 약수의 개수와 덧셈 문제 설명 문제 두 정수 left 와 right 가 매개변수로 주어집니다. left 부터 right 까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 제한 사항 1 ≤ left ≤ right ≤ 1,000 입출력 예 left right result 13 17 43 24 27 52 해결 import Foundation func solution(_ left:Int, _ right:Int) -> Int { var result: Int = 0 for n in left...right { let count = (1...n).map{$0}.filter{n%$0 == 0}.count result += count%2..
Hashable 오늘의 목표는 Hash 개념과 관련된 개념을 공부하면서 iOS 개발자 면접 질문 리스트 중 하나인, Hashable이 무엇이고 왜 Equatable을 상속해야 하는지 설명하시오. 에 대해 알아보도록 하겠습니다. 그리고 Hash라는 개념 자체는 이를 바탕으로 자료구조를 생각해서 코딩 테스트를 잘 풀 수 있습니다. (아마도? Hash Hash? Hash Table? 📌 Hash 해쉬, 해쉬값이란 데이터를 간단한 숫자로 변환한 것을 말합니다. 원본 데이터에 대해서 특정 규칙에 따라 처리하여 간단한 숫자로 변환된 값을 해쉬 값이라고 합니다. 여기서 말하는 특정 규칙은, 원본 데이터(객체)를 해쉬 함수를 사용해서 64bit의 Int값으로 변환한 것을 말합니다. ✅ 데이터가 동일하면 각 데이터의 해쉬값도 동일합니다..
프로그래머스 - 두 개 뽑아서 더하기 문제 설명 문제 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 사항 numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 입출력 예 numbers result [2, 1, 3, 4, 1] [2, 3, 4, 5, 6, 7] [5, 0, 2, 7] [2, 5, 7, 9, 12] 해결 import Foundation func solution(_ numbers:[Int]) -> [Int] { var arr: Set = [] for i in 0..
iOS-Concurrency 해당 글은 인프런-엘런 님의 강의를 듣고 정리한 글입니다. GCD에 들어가기 전에 관련 개념을 정리하고 들어가겠습니다. ✅ 쓰레드란 평소 PC 사양을 표현할 때 많이 사용하는 개념입니다. 4 코어 8 스레드, 8 코어 16 스레드 등..으로 많이 사용합니다. 이런 예시를 통해서 짐작할 수 있는 것처럼, 스레드는 컴퓨터의 일을 처리하는 부분입니다. ✔️ 스레드에게 일을 잘 분배하지 않았거나, ✔️ 쓰레드가 일을 잘 처리하지 못하고 있다면 >> 버벅거리는 현상이 나타납니다. 🤔 그렇다면 왜 버벅이는 현상이 나타날까요? 예를 들어 6 코어라고 가정을 해보겠습니다. 6 코어라면 최소한 12 스레드가 있을 것입니다. 앞서 스레드는 일하는 부분이라고 했습니다. 12 스레드의 의미는 간단하게 일하는 부분이 총 12개..
MVVM+RxSwift RxSwift를 MVVM 디자인 패턴과 함께 사용하면 보다 효과적으로 사용할 수 있습니다. MVVM 디자인 패턴에 대해서 간단하게 알아보고, RxSwift를 적용하는 방법을 예시를 통해서 알아보도록 하겠습니다. 먼저 많이 사용하고 있는 MVC 패턴에 대해서 알아보겠습니다. MVC 패턴 MVC 패턴은 대부분의 앱에서 사용되고, 애플에서 기본적으로 권장하는 디자인 패턴입니다. Model + View + Controller의 구조로 되어 있는 형태를 말합니다. - Controller가 View와 Model을 모두 업데이트 하고, - View는 화면에 UI, Model의 정보 등을 보여주는 역할만 하고, - Model은 앱의 정보를 업데이트하는 데이터를 읽고 씁니다. View와 Model은 서로에 대해 몰라야 ..
SwiftGen SwiftGen 프로젝트 리소스를 Swift 코드로 자동 생성하여 안전한 타입으로 사용 가능 SwiftGen 깃허브 SwiftGen 라이브러리는 프로젝트의 리소스(ex, 이미지, 폰트, 컬러, 다국어 문구 등)를 Swift 코드로 자동 생성해주는 도구입니다. 이 라이브러리를 사용하면, 리소스를 편하게 사용할 수 있고 리소스를 변경했을 때(또는, 없는 리소스를 참조하려고 할 때) 에러를 빠르게 찾을 수 있습니다. 라이브러리를 사용하지 않고 Xcode에서 이미지, 색상 등을 사용하려면 리소스 이름을 String으로 하여 사용해야 하는데, 오타 등의 에러는 발견하기 어렵기 때문에 쉽게 원인을 파악할 수 없습니다. 그러나 SwiftGen으로 생성된 코드로 리소스를 사용하면 프로젝트 내에 존재하는 리소스와 해당 ..
UIStackView UIStackView를 사용하면 화면을 구성할 때 뎁스를 깊게 들어가지 않고 View를 구성할 수 있습니다. (레이아웃을 안의 내용에 따라 알아서 레이아웃을 잡아주기 때문에, 몇 가지 조건을 작성해준다면, 생각보다 화면을 구성할 때 많이 쓰이기도 하고 유용하게 쓰입니다.) StackView란? 여러 개의 뷰(-> 여기서 말하는 View는 UIComponent를 통칭하는 말입니다.)를 정렬해서 나타낼 때 능률적인 인터페이스입니다. ✔️ 스택 뷰는 사용자 UI를 빠르고 쉽게 설계할 수 있는 강력한 도구입니다. ✔️ 스택 뷰 안의 여러 가지 속성을 사용해 배열된 뷰의 배치 방법을 지정할 수 있습니다. 🤔 여러 개의 뷰를 정렬한다? 예를 들어서, 화면에 버튼을 나란히 정렬하고 싶다고 생각해봅시다. (마치 앱 서..
BST(이진 탐색 트리) - 구현 이전 글에 이어서, 이진 탐색 트리 구조의 알고리즘을 구현해보겠습니다. 이진 탐색 트리의 특징을 활용한 알고리즘은 크게 3가지가 있습니다. >> 탐색/삽입/삭제 탐색 알고리즘 이진 탐색 트리의 특징을 이용하면 아래와 같은 개념-순서를 통해서 탐색 알고리즘을 구현할 수 있습니다. 1️⃣ 찾고자 하는 값을 루트 노드의 값과 비교합니다. 2️⃣ 찾고자 하는 값이 루트 노드의 값보다 작으면 >> 탐색은 루트 노드 기준으로 왼쪽 서브 트리를 기준으로 다시 시작합니다. 3️⃣ 찾고자 하는 값이 루트 노드의 키 값보다 크면 >> 탐색은 루트 노드 기준으로 오른쪽 서브 트리를 기준으로 다시 시작합니다. 위의 규칙을 바탕으로 swift 언어로 구현을 해보겠습니다. func search(from data: T) -> Bo..