반응형
풀이
먼저 입력 받은 numbers 문자열을 Int형 배열로 만들어준다.
let intArray: [Int] = numbers.map { Int(String($0)) ?? 0 }
순열을 이용해서 만들어 낼 수 있는 모든 숫자 조합을 찾은 후에 각각의 숫자를 소수인지 판별하여 셋에 저장한 후에 마지막에 셋에 있는 숫자의 개수를 카운트한다.
코드
import Foundation
var res: Set<Int> = []
func isPrime(_ num: Int) -> Bool {
if num == 0 || num == 1 {
return false
}
for i in 2..<num {
if num % i == 0 {
return false
}
}
return true
}
func permute(_ nums: [Int], _ targetNum: Int) {
var visited: [Bool] = [Bool](repeating: false, count: nums.count)
func permutation(_ permuRes: [Int]) {
if permuRes.count == targetNum {
// Int 배열을 String으로 변환 후 Int로 변환해서 소수 판별
let strRes = permuRes.map(String.init).joined()
if let intRes = Int(strRes) {
if isPrime(intRes) {
res.insert(intRes)
}
}
return
}
for i in 0..<nums.count {
if visited[i] {
continue
}
visited[i] = true
permutation(permuRes + [nums[i]])
visited[i] = false
}
}
permutation([])
}
func solution(_ numbers:String) -> Int {
let intArray: [Int] = numbers.map { Int(String($0)) ?? 0 }
for i in 1...numbers.count {
permute(intArray, i)
}
return res.count
}
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[고득점 Kit (DFS/BFS)] 단어 변환 (python, swift) (0) | 2021.10.11 |
---|---|
[고득점 Kit (완전탐색)] 카펫 (swift) (0) | 2021.10.11 |
[고득점 Kit (완전탐색)] 모의고사 (swift) (0) | 2021.10.11 |
[고득점 Kit (DFS/BFS)] 네트워크 (swift) (0) | 2021.10.11 |
[고득점 Kit (DFS/BFS)] 타켓 넘버 (swift) (0) | 2021.10.11 |
댓글