-
알고리즘 - 프로그래머스 기능개발 (Swift)
참조 : 프로그래머스 알고리즘 기능개발 문제 (Swift) 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 �� programmers.co.kr 문제 요건 1. 모든 작업은 speed의 배열의 진행율 만큼 하루에 1회식 완료 된다. 2. 앞의 작업이(선행 작업) 100%가 되었을 경우에만 배포할 수 있다. 3. 각 일별의 배포가 진행된 배포 갯수의 배열을 반환한다. 해결 순서 1. for문으로 progresses의 배열의 값을 speeds의 배열의 값으로 더하는 작업을 진행한다. 2. 완료율이 100이 되는 항목을 체크한다. (선행 ..
2020.08.04 09:49 -
알고리즘 - 프로그래머스 2019 카카오 블라인드 실패율 (Swift)
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로..
2020.07.29 17:23 -
알고리즘 - 프로그래머스 예산 (Swift)
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. 제한사항 d는 부서별로 신청한 금액이 들어..
2020.07.23 17:54 -
알고리즘 - 프로그래머스 핸드폰번호 가리기 (Swift)
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.제한 조건 s는 길이 4 이상, 20이하인 문자열입니다. 입출력 예 phone_numberreturn 01033334444 *******4444 027778888 *****8888 문자열 처리에 대한 문제이조 String을 다루는 방법만 공부하신다면 다양한 방법으로 간단하게 해결이 가능합니다. 2개의 방법을 소개할게요. 1. String 생성시 초기값 주기 2. 문자열 변경 하기 1. String 생성시 초기값 주기 아래와 같이 Str..
2020.07.23 15:53 -
알고리즘 - 프로그래머스 최대공약수와 최소공배수 (Swift)
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.제한 사항 두 수는 1이상 1000000이하의 자연수입니다. 입출력 예 nmreturn 3 12 [3, 12] 2 5 [1, 10] 입출력 예 설명 입출력 예 #1 위의 설명과 같습니다. 입출력 예 #2 자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다. 네 최대공약수와 최소공배수 구하는 문제네요. 최대공약수는 이전 글에서 다루었었조!? 최소공배수는 아래와 같이..
2020.07.23 15:21 -
알고리즘 - 프로그래머스 정수 제곱근 판별 (Swift)
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.제한 사항 n은 1이상, 50000000000000 이하인 양의 정수입니다. 입출력 예 nreturn 121 144 3 -1 입출력 예 설명 입출력 예#1 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다. 입출력 예#2 3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다. 네 제곱근을 구해서 제곱근이 있을 경우에 1식 더해서 다시 제곱을 해주어 반환해주는 내용입니다. 그렇게 어렵지 않지요. 기본적으로 풀어보면 아래와 같습니다. func solution(..
2020.07.23 14:22 -
알고리즘 - 프로그래머스 자연수 뒤집어 배열로 만들기 (Swift)
문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 nreturn 12345 [5,4,3,2,1] 네 레벨1의 문제라 그렇게 어렵진 않아요. 입력받은 숫자를 while을 돌면서 10으로 나눈값을 배열에 추가하여 리턴하는 방법도 있겠지만 조금더 심플하게 풀어볼게요. import Foundation func solution(_ n:Int64) -> [Int] { return String(n).map { Int(String($0))! }.reversed() } let reulst = solution(123134100023500) 먼저 입력..
2020.07.23 11:47 -
알고리즘 - 프로그래머스 시저 암호(Swift)
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.제한 조건 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다. 입출력 예 snresult AB 1 BC z 1 a a B z 4 e F d 네 문자열 처리에 대한 문제입니다. 해결 방법으로는 여러가지가 있겠지요..? 1. 아스키 코드를 이용한 방법 2. Array를 이용한 방법..
2020.07.20 14:29
-
Swift - starts
starts(with:) Returns a Boolean value indicating whether the initial elements of the sequence are the same as the elements in another sequence. 시퀀스의 초기 요소가 다른 시퀀스의 요소와 같은지 여부를 나타내는 부울 값을 반환한다. func starts(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, Self.Element == PossiblePrefix.Element let a = 1...3 let b = 1...10 print(b.starts(with: a)) // Prints "true" print..
2020.07.13 10:30 -
Swift - Prefix
prefix(_:) Returns a subsequence, up to the specified maximum length, containing the initial elements of the collection. 컬렉션의 초기 요소를 포함하는 지정된 최대 길이까지 하위 시퀀스를 반환한다. func prefix(_ maxLength: Int) -> ArraySlice let numbers = [1, 2, 3, 4, 5] print(numbers.prefix(2)) // Prints "[1, 2]" print(numbers.prefix(10)) // Prints "[1, 2, 3, 4, 5]"
2020.07.13 10:19 -
Swift - 고급() 연산자
고급(비트) 연산자를 이해하기에 앞서 먼저 Int, UInt를 선행 학습하시기를 권장해 드립니다. 정수값을 저장하기 위해 사용되는 변수 타입 : Int & UIint Int -> -, + 부호 모두 저장 가능한 변수 타입 UInt -> + (양)의 부호만 저장 가능한 변수 타입 자 여기에서 Int8, UInt8 ...Int64, Int64 이렇게 뒤에 Int[숫자]가 들어가는데 이건 변수에 저장가능한 용량!?을 표현하는거에요. 8비트, 16비트, 32비트, 64비트 이렇게요. 비트가 적을 수록 저장할 수 있는 용량이 작아 지겠조? #아래와 같이 저장 사이즈가 차이가 있습니다. Int8 -> -128 ~ 127 .... Int64 -> 0 ~ 18446744073709551615 UInt8 -> 0 ~ 2..
2020.07.07 18:03 -
Swift - zip
zip(_:_:) Creates a sequence of pairs built out of two underlying sequences. 두 개의 기본 시퀀스로 만들어진 시퀀스 쌍을 만듭니다. 알고리즘을 풀다 두 배열의 값을 더해서 다시 배열로 만드는 문제가 있었는데 해결 하고 나니 다른 분의 풀이에 zip함수를 사용하여 각독성이 더 좋아보이는 풀이를 보고 zip 함수라는 편리한 함수도 있구나 해서 알아보겠습니다. 아래는 공식문서의 zip함수 사용법입니다. let words = ["one", "two", "three", "four"] let numbers = 1...4 for (word, number) in zip(words, numbers) { print("\(word): \(number)") } //..
2020.07.06 15:03 -
Swift - flatMap, compactMap
flatMap(_:) Returns an array containing the concatenated results of calling the given transformation with each element of this sequence. 이 시퀀스의 각 요소와 함께 지정된 변환을 호출하는 연결된 결과를 포함하는 배열을 반환한다. compactMap(_:) Returns an array containing the non-nil results of calling the given transformation with each element of this sequence. 이 시퀀스의 각 요소를 사용하여 지정된 변환을 호출한 nil이 아닌 결과를 포함하는 배열을 반환한다. Swift 5.0 기준입니다. ..
2020.07.02 16:19 -
Swift - stride
stride(from:to:by:) Returns a sequence from a starting value to, but not including, an end value, stepping by the specified amount. 지정된 값만큼 단계적으로 시작 값에서 종료 값까지 포함하는 시퀀스를 반환합니다. stride(from:through:by:) Returns a sequence from a starting value toward, and possibly including, an end value, stepping by the specified amount. 시작 값부터 끝 값을 포함하여 지정된 양만큼 단계별로 시퀀스를 반환합니다. 간략하게 말하면 for문 과 동일해요. 그런데 Swift에서..
2020.07.01 17:11 -
Swift - map
map(_:) Returns an array containing the results of mapping the given closure over the sequence’s elements. 데이터 컨테이너의 지정 된 값을 매핑하여 반환해 준다. 딕셔너리 타입의 key 값만 추출 한 배열을 생성할때는 아래와 같이 사용하며, var dic: Dictionary = [ 2 : 0, 1 : 0, 3 : 0, 5 : 0, 7 : 0, 6 : 0, 10 : 0, 9 : 0, 4 : 0, 8 : 0] let keyIntArray = dic.map { (key: Int, value: Int) -> Int in return key } // [4, 1, 9, 6, 3, 5, 7, 8, 2, 10] 조금더 활용해 보면 키..
2020.06.29 14:34 -
Swift - filter
filter(_:) Returns an array containing, in order, the elements of the sequence that satisfy the given predicate. 데이터 컨테이너 내부에 값을 걸러서 반환해준다. var dic: Dictionary = [ 2 : 0, 1 : 0, 3 : 0, 5 : 0, 7 : 0, 6 : 0, 10 : 0, 9 : 0, 4 : 0, 8 : 0] let descDicA = dic.filter { (dic: Dictionary.Element) -> Bool in return dic.key % 2 == 0 } // [4: 0, 10: 0, 2: 0, 8: 0, 6: 0] 파라미터 및 리턴값 생략 let descDicB = dic.filt..
2020.06.29 14:26