일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Protocol
- Timer
- SwiftUI Boolean 값
- UICollectionViewFlowLayout
- WeatherManager
- 서체관리자
- MKMapItem
- CoreLocation
- RunningTimer
- Required Reason API
- swift
- addannotation
- 러닝타이머
- 클로저의 캡슐화
- UIAlertAction
- Xcode
- App Store Connect
- AnyObject
- font book
- 한국어 개인정보처리방침
- Startign Assignments
- MKMapViewDelegate
- weatherKit
- dispatchsource
- 러닝기록앱
- CLLocationManagerDelegate
- 영문 개인정보처리방침
- weak var
- xcode로 날씨앱 만들기
- 단일 책임원칙
- Today
- Total
목록Coding Test Practice in Swift (31)
VesselWheel
문제 풀이 func solution(_ s: String, _ n: Int) -> String { let lowerCaseLetters = Array("abcdefghijklmnopqrstuvwxyz") let upperCaseLetters = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ") var result = "" for char in s { if char == " " { result.append(" ") continue } let letters = char.isLowercase ? lowerCaseLetters : upperCaseLetters if let index = letters.firstIndex(of: char) { let shiftedIndex = (index + n) ..
문제 풀이 - 최초풀이 import Foundation func solution(_ sizes:[[Int]]) -> Int { var maxsize = 0 var minsize = 0 for i in sizes { maxsize = max(maxsize, i.max()!) minsize = min(minsize, i.min()!) } return maxsize * minsize } -> 상기의 코드로 풀 경우, i.max()와 i.min()에서는 배열 i의 최대값과 최소값을 반환하는데, 이 값들은 Optional이므로 강제 언래핑(!)을 사용하고 있다. 이는 i가 비어있을 경우 런타임 오류를 발생시킬 수 있다. 따라서, import Foundation func solution(_ sizes:[[Int]]..
문제 풀이 import Foundation func solution(_ t:String, _ p:String) -> Int { let length = p.count // p는 1 ≤ p의 길이 ≤ 18 를 갖음 var count = 0 // 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수 for i in 0..
문제 풀이 import Foundation func solution(_ number:[Int]) -> Int { var count = 0 let n = number.count for i in 0.. Int? { guard let firstNum = array.first else { return nil } var maxNum = firstNum for num in array { if num > maxNum { maxNum = num } } return maxNum } let input = [3, 5, 6, 1, 2, 4] let result = findMaxNum(input) print("정답 = 6 / 현재 풀이 값 = ", findMaxNum([3, 5, 6, 1, 입력 array의 원소 갯수 = N ..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12930 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 func solution(_ s:String) -> String { var arr: [String] = [] var x = 0 for i in s { if x % 2 == 0 { arr.append(String(i.uppercased())) } else { arr.append(String(i.lowercased())) } x += 1 if i == " " { x = 0 } } retur..
3진법 뒤집기 코딩테스트 문제를 풀기 전에 3진법을 활용하는 이유가 궁금해졌다. 왜 3진법이 나왔을까? 수학적 모델에 있어서 3진법은 활용될 수 있다. 더보기 전자기기의 세그먼트 디스플레이: 일부 전자기기에서는 7세그먼트 디스플레이를 사용하여 숫자를 표시합니다. 7세그먼트 디스플레이는 각 숫자를 표현하기 위해 7개의 세그먼트를 사용하는데, 이때 3진법을 사용하여 숫자를 표현할 수 있습니다. 예를 들어, 0부터 9까지의 숫자를 3진법으로 표현하면 다음과 같이 됩니다: 0(00), 1(01), 2(10), 3(11), 4(100), 5(101), 6(110), 7(111), 8(1000), 9(1001). 이렇게 3진법을 사용하면 세그먼트 디스플레이에서 숫자를 표현하기가 편리해집니다. 시계의 시, 분, 초 ..
문제 코드 func solution(_ n:Int, _ m:Int) -> [Int] { func gcd(_ a: Int, _ b: Int) -> Int { let mod: Int = a % b return 0 == mod ? min(a, b) : gcd(b, mod) } func lcm(_ a: Int, _ b: Int) -> Int { return a * b / gcd(a, b) } return [gcd(n, m), lcm(n, m)] } 해석 유클리드 호제법을 사용하여 두 수의 최대공약수(GCD)와 최소공배수(LCM)을 찾자. 1. gcd(_ a: Int, _ b: Int) -> Int: 이 함수는 두 수의 최대공약수를 찾는 역할을 합니다. 유클리드 호제법을 사용하여, 두 수의 나머지를 계속해서 구하..
풀이 import Foundation let n = readLine()!.components(separatedBy: [" "]).map { Int($0)! } let (a, b) = (n[0], n[1]) for _ in 0..
문제 풀이 import Foundation let n = readLine()!.components(separatedBy: [" "]).map { Int($0)! } let (a, b) = (n[0], n[1]) for _ in 0..
접두사로 NS가 붙은 타입은 NSString, NSArray, NSSet, NSDictionary 등등 여러가지가 있다. 이들은 NextStep의 줄임말로, 예전 Objective-C 시절의 타입을 일컫는다. 클래스로 구현되어 있다. Foundation 프레임워크를 import 하여 사용해야 한다. 스위프트에서는 필요 시 Swift의 타입들을 이들 타입으로 브릿징 하여 사용할 수 있다.(예를 들어 String을 NSString 으로) NS 타입에 관한 좋은 글: https://yagom.net/forums/topic/%EA%B8%B0%EC%B4%88%EC%A0%81%EC%9D%B8-swift-%EB%AC%B8%EB%B2%95-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%8..
문제 풀이 func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] { var result: [[Int]] = [] for i in 0..
옵셔널 💡 값이 없음을 포함하는 옵셔널의 개념 옵셔널과 nil 값이 없을 수 있는 상황에서 옵셔널(Optional)을 사용합니다. 옵셔널은 물음표 ? 로 나타냅니다. (타입 어노테이션) 옵셔널은 두 가지 가능성을 나타냅니다. 값이 있고 옵셔널로 래핑(wrapping)해놓은 값을 언래핑(unwrapping)하여 해당 값에 액세스할 수 있다. 값이 전혀 없다. 옵셔널 타입끼리의 연산은 불가능 예시 코드 // 축약 타입 표현 var serverResponseCode: Int? = 404 // 정식 타입 표현 var myPetName: Optional = "멍멍이" func pay(with card: String?) { // 구현 코드 } // 옵셔널 타입끼리의 연산은 불가능 var num1: Int? = 4 ..
문제 풀이 func solution(_ s:String) -> Bool { if s.count != 4 && s.count != 6 { return false } for char in s { if !char.isNumber { return false } } return true } 문자열 s가 4 혹은 6이 아닌 경우를 count해서 맞지 않으면 false 문자열 s에 char가 숫자가 아니면 false 한 후 두 조건에 맞으면 나머지인 경우는 숫자이며 4, 6의 길이를 가진 문자열을 배출 다른사람 풀이 func solution(_ s:String) -> Bool { return (Int(s) != nil && (s.count == 4 || s.count == 6)) ? true : false } 문자열..
문제 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다. 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요. 단, 금액이 부족하지 않으면 0을 return 하세요. 제한 사항 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수 놀이기구의 이용 횟수 coun..
문제 약수의 개수와 덧셈 Description 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ left ≤ right ≤ 1,000 입출력 예leftrightresult 13 17 43 24 27 52 입출력 예 설명 입출력 예 #1 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다. 수약수약수의 개수 13 1, 13 2 14 1, 2, 7, 14 4 15 1, 3, 5, 15 4 16 1, 2, 4, 8, 16 5 17 1, 17 2 따라서, 13 + 14 + 15 - 16 + 17 = 4..
1. class 구조화 import Foundation class Calculator { var a : Double? var b : Double? //덧셈 func plus(_ a: Double, _ b: Double) -> Double { return a + b } //뺄샘 func minus(_ a: Double, _ b: Double) -> Double { return a - b } //곱셉 func multi(_ a: Double, _ b: Double) -> Double { return a * b } //나눗셈 func divide(_ a: Double, _ b: Double) -> Double? { guard b != 0 else { print("0으로 나눌 수 없어요.") return nil..
들어가기 앞서, 내적(스칼라곱) 이란 https://ko.wikipedia.org/wiki/%EC%8A%A4%EC%B9%BC%EB%9D%BC%EA%B3%B1 두 벡터의 좌표가 각각의 배열 a = [a1, a2, ...], b = [b1, b2]을 가지고 있을 때, 이 둘의 스칼라곱은 같은 위치의 성분을 곱한 뒤. 모두 합하여 얻는 값이다. 문제 풀이 func solution(_ a: [Int], _ b: [Int]) -> Int { // 조건문으로 두 벡터의 길이가 같지 않으면 guard 조건문을 실행 guard a.count == b.count else { // 두 배열의 길이가 다르면 예외 처리 또는 기본값 반환 return 0 } var result = 0 for i in 0.. Int { retu..
제곱 구하기 import Foundation let value = 3.0 pow(value, 2) // 9.0 제곱할 값 value, 제곱수 2 결과값을 Int로 변환하려니 다음과 같은 에러가 났다. Initializer 'init(_:)' requires that 'Decimal' conform to 'BinaryInteger' pow 의 두 인자를 모두 소수점형으로 바꾸면 해결이 된다. pow(_ x: Decimal, _ y: Int) -> Decimal 대신 다음 생성자를 사용하는 방식이다. (Double로 변환해도 가능) pow(_: Float, _: Float) -> Float 제곱근 구하기 import Foundation let value = 9.0 sqrt(value) // 3.0 func ..
문제 풀이 func solution(_ n:Int) -> String { // 0부터 n-1까지 범위 생산 // map 함수를 이용하여 짝수, 홀수 구분 // map 명령 배열 내에 조건에 따라 실행해라. // reduce 함수 배열의 모든 요소 결합, 초기값으로 "" String 빈문자열, 다음 자리부터 더하기 return (0 ..< n).map{($0 % 2 == 0 ? "수":"박")}.reduce("", +) } Tip Instance Method map(_:) Returns an array containing the results of mapping the given closure over the sequence’s elements. iOS 8.0+ macOS 10.10+ Mac Catalys..
문제 풀이 func solution(_ arr:[Int]) -> [Int] { if arr.count == 1 { return [-1] } var min = arr.min()! var answer = arr.filter{$0 > min} return answer } 해석 1. 제일 작은 수를 제거하고나서 빈 배열이면 [-1]을 배출하려면 // 배열의 길이를 count로 길이가 1이라면, 함수는 [-1] 반환하고 종료 if arr.count == 1 { return [-1] 이어서 // min() 함수를 활용하여 배열에서 가장 작은 원소를 찾고, 그 값을 인스턴스 min에 저장 // min() 함수는 배열의 모든 원소 중 가장 작은 값을 반환 // (!) 느낌표는 강제 추출 연산자로, 반환값이 Option..
문제 풀이 import Foundation func solution(_ numbers:[Int]) -> Int { let total = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].reduce(0, +) let sum = numbers.reduce(0, +) return total - sum } 해석 1. 배열 [0...9] 를 포함하고 있는 인스턴스 total를 모두 더하기 : reduce(0, +) // 0번째부터 다음 항의 연산자 +로 계산 2. 상수 sum에 매개변수 배열 numbers를 모두 더하기 : reduce(0, +) // 배열안에 모두 더한 상수 sum 3. total 인스턴스에서 sum 인스턴스를 빼면, numbers 배열에 포함되지 않은 수를 모두 더한 값 return T..
문제 Description 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 phone_number는 길이 4 이상, 20이하인 문자열입니다. 입출력 예 phone_numberreturn "01033334444" "*******4444" "027778888" "*****8888" 풀이 func solution(_ phone_number:String) -> String { return String(repeating: "*", count: phone_number.count -..
문제 풀이 import Foundation func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int { // 결과값 result 초기화 var result = 0 // i 인티져가 매개변수 absolutes의 각 자리를 순회하여 signs[i]가 참인 정수가 양수, 아니면 음수로 각각의 배열 absolute 안에서 더하거나 뺀다. for i in 0.. Int { return (0..
문제 풀이 func solution(_ arr:[Int], _ divisor:Int) -> [Int] { // 매개변수 arr을 divisor로 나눈 나머지가 0으로 필터링 한 후 오름차순(sorted())으로 배열 안에서 정렬 let result = arr.filter{$0 % divisor == 0}.sorted() // 나누어 떨어지는 element가 없으면 배열 안에 -1을 담아 result로 반환 return result.count == 0 ? [-1] : result } Tip 고차함수 filter 참조 https://vesselwheel.tistory.com/103
문제 풀이 func solution(_ seoul:[String]) -> String { return "김서방은 \(seoul.firstIndex(of: "Kim")!)에 있다" } TIP firstIndex(of:) Returns the first index where the specified value appears in the collection. iOS 8.0+ iPadOS 8.0+ macOS 10.10+ Mac Catalyst 13.0+ tvOS 9.0+ watchOS 2.0+ visionOS 1.0+ Beta func firstIndex(of element: Self.Element) -> Self.Index? Available when Element conforms to Equatable. P..
문제 입출력 설명 입출력 예 #1 문제의 설명과 같습니다. 입출력 예 #2 16 → 8 → 4 → 2 → 1 이 되어 총 4번 만에 1이 됩니다. 입출력 예 #3 626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다. 풀이 func solution(_ num:Int) -> Int { // 매개변수를 number 변수에 할당 var number = num // count 변수 초기화, 작업의 반복 var count = 0 // while 루프를 사용하여 number가 1이 아니고 count가 500 이하인 동안 작업을 반복 while number != 1 && count
문제 풀이 func solution(_ a:Int, _ b:Int) -> Int64 { // Int 탑입의 매개변수 a, b를 받아서 최소값(a, b)...최대값(a, b) 중에 reduce 함수 활용하여 첫 번째 인자는 초기값으로 0을 사용하고 두번째 인자는 + 연산자를 활용하여 모든 정수를 합한다. == a, b사이의 모든 정수의 합을 반환한다. return Int64((min(a, b)...max(a, b)).reduce(0, +)) } /* reduce 함수 란? Swift의 reduce 메서드는 컬렉션의 모든 요소를 결합하여 단일 값을 생성하는 데 사용됩니다. 이 메서드는 두 개의 인수를 받습니다: 초기 결과 값과 결합을 수행하는 클로저입니다. reduce 메서드의 기본적인 사용법은 다음과 같습..
// Int64 타입의 매개변수 n을 받아서, func solution(_ n:Int64) -> Int64 { //정수 n을 String으로 변환 후 내람차순으로 sorted(by: >) 정렬한 후 정렬된 문자열(String)으로 정렬 한 후 이를 Int값으로 가장 높은 숫자에서 낮은 숫자 순으로 재정렬 return Int64(String(String(n).sorted(by: >)))! // 재정렬된 문자열을 Int64 숫자로 변환하며 함수 내부값 강제해제(!) } solution(3252) // 결과값 5322 /* 문법 Tip 옵셔널 강제해제 ! 옵셔널을 강제 해제하는 방법은 옵셔널 타입의 값 뒤에 "!"만 붙여주면 됩니다. 이 "!"를 강제 해제 연산자라고 합니다. var optInt: Int? =..
문제 풀이 import Foundation func solution(_ n:Int64) -> Int64 { var N = Double(n) // 입력받은 양의 정수 n을 64bit 부동소수점 Double 자료형으로 전환 // Foundation에서 제공하는 제곱근(sqrt) 함수에서 제곱근에서 정수부분을 버림(floor) 함수를 뺀 값이 0이 아닐 때 if (sqrt(N) - floor(sqrt(N)) != 0) { // n이 양의 정수 x의 제곱이 아니라면 -1 리턴 return -1 } else { // Foundation에서 제공하는 제곱(pow)함수 사용하여 제곱근과 제곱 계산, n이 양의 정수 x의 제곱이라면 x+1제곱 리턴 return Int64(pow(sqrt(N)+1,2)) } } solu..
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.제한 조건 n은 10,000,000,000이하인 자연수입니다. func solution(_ n:Int64) -> [Int] { var temp: Int64 = 0 // 파라미터 초기화 var i: Int64 = 0 // 파라미터 초기화 var array = Array() // // 파라미터 array 배열 저장시 Int 타입배열로 초기값은 빈배열 guard (n > 10000000000 && n