안녕하세요 !
소수만들기 문제를 Swift와 Python으로 풀어보았습니다.
https://programmers.co.kr/learn/courses/30/lessons/12977
풀이
이 문제는
조합
을 이용해서 풀면 되는데요.
Swift에는 조합을 구할 수 있는 라이브러리가 없어서,, 직접 구현하였고
Python은 itertools에 있는 combinations 라이브러리를 이용해서 간단하게 풀었습니다.
Swift로 구현한 코드입니다. [Swift 조합 구현 참고]
import Foundation
func combination(total: [Int], shouldSelect: Int, current index: Int, selected: [Int], arr: inout [[Int]]) {
if shouldSelect == 0 {
arr.append(selected)
} else if index == total.count {
return
} else {
var newSelected = selected
newSelected.append(total[index])
combination(total: total, shouldSelect: shouldSelect-1, current: index+1, selected: newSelected, arr: &arr)
combination(total: total, shouldSelect: shouldSelect, current: index+1, selected: selected, arr: &arr)
}
}
func isPrimeNumber(_ num: Int) -> Bool {
for div in 2...Int(sqrt(Double(num))) {
if num % div == 0 {
return false
}
}
return true
}
func solution(_ nums:[Int]) -> Int {
var answer = 0
var arr: [[Int]] = []
combination(total: nums, shouldSelect: 3, current: 0, selected: [], arr: &arr)
for item in arr {
let sum = item.reduce(0, +)
if isPrimeNumber(sum) {
answer += 1
}
}
return answer
}
python으로 푼 코드입니다.
from itertools import combinations
def is_prime_number(number):
for n in range(2, number // 2):
if number % n == 0:
return False
return True
def solution(nums):
answer = 0
combi = list(combinations(nums, 3))
for item in combi:
sum_item = sum(item)
if is_prime_number(sum_item):
answer += 1
return answer