새소식

인기 검색어

프로그래머스/Lv.2

[Swift] 소수 찾기

  • -
import Foundation

func solution(_ numbers:String) -> Int {
    
    var numbers = numbers.map { String($0) }.sorted(by: >)
    let max = Int(numbers.joined())!

    if max < 2 { return 0 }
    if max < 4 { return 1 }

    var result: Set<Int> = []
    var isPrime: [Bool] = Array(repeating: true, count: max + 1)
    var visited: [Bool] = Array(repeating: false, count: numbers.count)
    
    isPrime[0] = false
    isPrime[1] = false

    for i in 2...max {
        var j = 2
        while i*j <= max {
            isPrime[i * j] = false
            j += 1
        }
    }
    
    func dfs(_ visited: [Bool], _ str: String) {
        if !visited.contains(false) { return }
        
        var visited = visited
        
        for i in 0..<visited.count {
            if visited[i] { continue }
            visited[i] = true
            let newStr = str + numbers[i]
            if isPrime[Int(newStr)!] { result.insert(Int(newStr)!) }
            dfs(visited, newStr)
            visited[i] = false
        }
        
    }
    
    dfs(visited, "")
    
    return result.count
}

 

'프로그래머스 > Lv.2' 카테고리의 다른 글

[Swift] 롤케이크 자르기  (0) 2023.04.29
[Swift] 숫자 변환하기  (0) 2023.04.29
[Swift] 다리를 지나는 트럭  (0) 2023.04.29
[Swift] 2개 이하로 다른 비트  (0) 2023.04.29
[Swift] 뒤에 있는 큰 수 찾기  (0) 2023.04.29
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.