알고리즘 문제 풀이

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

lgvv 2022. 4. 1. 23:47

프로그래머스 LV2. 소수 찾기

 

✅ 소수 찾기를 재귀를 통해서 해결하였음

 

걸린 시간은 거의 한 2시간 넘게 걸렸는데, 재귀를 사용해서 문제를 푼게 처음이라서 그렇다.

다른 사람들은 dfs, bfs, 순열 등등 많던데, 나는 이게 제일 간편한 것 같다.

 

재귀 해보니까 그렇게 어렵지 않다 ㅎㅎ

import Foundation

var results: Set<Int> = []

func solution(_ numbers:String) -> Int {
        var count = 0
        
        for len in 1...numbers.count {
            reculsive(list: "", remain: numbers, len: len)
        }
        
        results.remove(0)
        results.remove(1)
        
        results.forEach { result in
            var flag = true
            
            // 소수 판별
            for number in stride(from: 2, to: result, by: 1) {
                if result % Int(number) == 0 {
                    flag = false
                    break
                }
            }
            
            if flag { count += 1  }
        }
        
        return count
    }

func reculsive(list: String , remain: String, len: Int) {
        
        if list.count == len {
            results.insert(Int(list)!)
            return
        }
        
        for i in 0..<remain.count {
            var list = list
            let index = remain.index(remain.startIndex, offsetBy: i)
            let str = remain[index]
            list = "\(list)\(str)"
            
            var arr = remain
            
            arr.remove(at: index)
            
            reculsive(list: list, remain: arr, len: len)
        }
    }