반응형
이번 문제는 소인수분해를 해서 나온 소수들의 갯수를 확인하고, k 값과 동일한 소수의 갯수가 연속되는 횟수에 대해서 구하는 문제입니다.
1. Swift
1-1. 본인의 풀이
소인수분해를 하는 함수를 하나 만들고(primeCountChecker) 해당 함수에서 반환하는 값을 비교해서 k와 동일한 값이 연속해서 반환되는 횟수를 구했습니다.
func consecKprimes(_ k: Int, _ arr: [Int]) -> Int {
// your code
var returnValue: Int = 0
var isContinue: Bool = false
for element in arr {
let test = primeCountChecker(element)
guard test == k else {
if isContinue {
isContinue = false
}
continue
}
if isContinue == false {
isContinue = true
} else {
returnValue += 1
}
}
return returnValue
}
func primeCountChecker(_ n: Int) -> Int {
var num = n
var result: [Int] = []
var count = 2
while num != 1 {
if num % count == 0 {
num = num / count
result.append(count)
count = 2
} else {
count += 1
}
}
return result.count
}
primeCountChecker의 동작은 나머지가 0인 값이 나오면 해당 값으로 나눈 결과물을 num에 저장하고, 그 값을 다시 2부터 차례로 나누게 하는 식입니다.
해당 함수에서 result 배열에는 소수들이 들어있습니다.
1-2. Best Solution
Best Practices를 받은 문제풀이입니다.
func consecKprimes(_ k: Int, _ arr: [Int]) -> Int {
func prim(_ n: Int) -> Int {
var na = n, i = 2, cn = 0
while na > 1 { while na % i == 0 { cn += 1; na /= i }; i += 1 }
return cn
}
var i = 0, cn = 0
while i < arr.count - 1 {
if (prim(arr[i]) == k) && (prim(arr[i + 1]) == k)
{cn += 1}
i += 1;
}
return cn
}
동작의 원리 자체는 비슷하지만, 훨씬 간략하게 작성했네요.
알고리즘을 풀다보면 언제나 간략하게 작성하는 사람들을 보게되는데, 항상 신기하게 느껴집니다..
반응형
'Codewars(알고리즘) > 5Kyu' 카테고리의 다른 글
[Codewars] [5Kyu] Diophantine Equation (0) | 2023.07.17 |
---|---|
[5Kyu] Linked Lists - Front Back Split(정리중) (0) | 2021.04.14 |
[Codewars] [5kyu] Resistor Color Codes, Part 2 (수정중) (0) | 2021.01.26 |
[Codewars] [5kyu] Product of consecutive Fib numbers (0) | 2021.01.26 |