[Swift / Python] 프로그래머스(Lv1) - 소수 만들기

Kerri·2021년 6월 25일
0

코테

목록 보기
61/67

안녕하세요 !

소수만들기 문제를 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
profile
안녕하세요 !

0개의 댓글