[프로그래머스 LV2] 소수 찾기

Junyoung Park·2022년 8월 13일
0

코딩테스트

목록 보기
553/631
post-thumbnail

1. 문제 설명

소수 찾기

2. 문제 분석

주어진 숫자를 통해 만들 수 있는 모든 수들을 순열로 만드는데 DFS를 사용하자. 유효한 숫자를 가져왔다면, 해당 수가 소수인지 판별하고 그 개수를 카운트.

3. 나의 풀이

import Foundation

func solution(_ numbers:String) -> Int {
    let numbers = Array(numbers).map{String($0)}
    var numberSet = Set<Int>()
    var checked = Array(repeating: false, count: numbers.count)
    
    func DFS(_ numberArray: [String]) {
        if numberArray.count == numbers.count {
            return
        }
        
        for i in 0..<numbers.count {
            if !checked[i] {
                checked[i] = true
                DFS(numberArray + [numbers[i]])
                let number = Int((numberArray + [numbers[i]]).joined())!
                numberSet.insert(number)
                checked[i] = false
            }
        }
    }
    DFS([])
    let answer = Array(numberSet).filter{isPrime($0)}.count
    return answer
}

func isPrime(_ number: Int) -> Bool {
    if number < 2 {
        return false
    }
    
    let valid = Int(sqrt(Double(number))) + 1
    
    for i in 2..<valid {
        if number % i == 0 {
            return false
        }
    }
    return true
}
profile
JUST DO IT

0개의 댓글