개발/Swift
-
-
[Swift] 카펫 프로그래머스 코딩테스트개발/Swift 2022. 1. 28. 15:43
염두 해야할것은 다음과 같다. 갈색,노란색의 합은 총 카펫의 격자수와 같다. 가로의 갯수 x 세로의 갯수를 y라고 두면 노란색 격자의 갯수는 x갯수에서 두개를 뺀값 y갯수에서 두개를 뺀 값과 같다. 두가지 조건을 충족하면 해당 문제의 답을 찾을수있다. 첫번째로 총 합을 구한후에 어떤수로 나누어 떨어지는지를 확인하면 사각형형태가 완성된다. 예로 총합이 20이라면 2,4,5,10 로 나누어 떨어진다. 나누어 떨어진 2,4,5,10 은 y의 갯수 , 총합을 y로 나눈값은 x의 갯수가 된다. ex> 10,5,4,2 가로가 세로보다 더 길거나 같기 때문에 y가 작은 순부터 시작해서 먼저 발견되면 리턴하는식으로 구현하면 될것이다. 그리고 y가 2이하인 경우는 노란색이 나올수없으므로 패스하자. let sum = br..
-
[Swift] 소수 찾기 코딩테스트 프로그래머스개발/Swift 2022. 1. 25. 19:02
재귀함수 DFS 에 익숙하지 않아서 문제를 해결하는는데 오래 걸렸다 해당 문제는 DFS를 사용해 만들수 있는 모든 경우의 수를 만들고 해당 수가 소수인지 체크후 배열에 넣으면 되는 문제이다. 중요한것은 DFS를 사용해 경우의 수를 만드는 일이었기 떄문에 소수를 분별 하는것은 짧게 설명한다. 소수 소수는 1말고 약수가 없는수다. 11 이나 13이런건 1말고 나누어 떨어지는 수가없다. 이런거는 해당 수의 제곱근이 그보다 적은 숫자로 나누어 떨어지는지 아닌지 체크하면 된다. for i in 2...숫자의 제곱근+1{ if(num % i == 0){ return false } } 나누어 떨어지면 소수가 아니므로 패스하면된다. 여기서 1은 소수가 아니고 2는 체크할것없이 소수가 맞으니 패스한다. func isPr..
-
[Swift] 가장 큰 수 코딩테스트 프로그래머스개발/Swift 2022. 1. 17. 18:16
배열을 결국 잘 정렬 하면 되는 문제다. 결국 가장 큰수를 만들기 위해서는 정렬 할때 두숫자의 조합을 비교해 더큰수를 기준으로 정렬하면 되는것이다. 예를 들어 30, 34 를 비교할떄 3034 vs 3430 이렇게 두수를 합쳐서 비교하면 정렬이 완성된다. 단지 “0000” 인경우를 예외로 두면 된다. func solution(_ numbers:[Int]) -> String { var sortedNumbers = numbers.sorted { (num1, num2) -> Bool in return Int("\\(num1)\\(num2)")! > Int("\\(num2)\\(num1)")! } if(sortedNumbers[0]==0){ return "0" } let result = sortedNumbers..
-
[Swift] 이준 우선 순위 큐 프로그래머스 코딩테스트개발/Swift 2022. 1. 13. 14:09
어떻게 풀어야 할지 고민도 없이 문제를 읽고 바로 해결법을 찾았던 문제였다. 들어오는 값은 [”명령어 값”] 이므로 “ “ 을 기준으로 나눠 배열로 바꾼다. 그러면 [”명령어”,”값”] 인 형태가 될것이고 조건문을 통해 명령어가 “I”면 값이 들어있는 배열에 값을 추가하고 그렇지 않으면 삭제이므로 값을 보고 “1” 이면 값이 들어있는 배열을 정렬후 가장 큰값을 제거하고 “1” 이 아니면 작은 값을 제거하면된다. 이후에 값이 들어있는 배열이 비어있는경우 [0,0]을 리턴 값이 있으면 최대 최소값을 리턴해주면 된다. var valueArray = [Int]() for index in 0..
-
[Swift] 다리를 지나는 트럭 프로그래머스 코딩테스트개발/Swift 2022. 1. 9. 17:49
필요한 변수들은 다음과같다. 트럭 대기 배열 다리위에 있는 트럭 배열 경과 시간 남은 시간 배열 다리위에 있는 트럭무게의 합 해결방법 반복문을 하나 만든다 이 반복문은 트럭 대기 배열, 다리위 트럭 배열이 모두 비었을때 반복 중지되고 결과값이 리턴된다. 1시간이 지났으므로 시간 배열값 -1씩 해주고(시간배열 비어있지 않은경우) 배열 맨앞의 값이 0이면 다리를 지났다는 의미 이므로 시간배열, 다리위 배열에서 제거하며, 해당 무게를 현재 다리위 트럭들 무게 에서 빼준다. 대기배열에 트럭이 남아있다면 현재 가용한 무게(다리가 감당할수 있는 무게 - 현재 다리위 트럭들 무게 )와 대기배열 첫번째 값을 비교하여 무게를 감당 할수 있다면 첫번째 트럭을 대기 배열에서 제거한다. 동시에 시간 배열에 다리 길이의 값(방..
-
[Swift] 프린터 프로그래머스 코딩테스트개발/Swift 2022. 1. 6. 16:05
내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 싶습니다. 위의 예에서 C는 1번째로, A는 3번째로 인쇄됩니다. 현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요. 제한사항 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다. 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다. location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표..
-
[Swift] 기능개발 코딩테스트 프로그래머스개발/Swift 2022. 1. 4. 16:50
작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 100 이하의 자연수입니다. 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다. 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses..