문제
N과 M을 입력받아 nPm 의 순열을 구하는 문제였다.
풀이
import Foundation
let nm = readLine()!.split(separator: " ").map { Int($0)! }
let n = nm.first!
let m = nm.last!
let nums = Array(1...n) // [1, 2, ..., n]
/// nPr
func permutation(n elements: [Int], r: Int) -> [[Int]] {
var result = [[Int]]()
var visited = [Bool](repeating: false, count: n)
func permu(_ temp: [Int]) {
if temp.count == r {
result.append(temp)
return
}
for i in 0..<elements.count {
if !visited[i] { // 중복 없도록 방문한 요소는 건너뛰기
visited[i] = true
permu(temp + [elements[i]])
visited[i] = false
}
}
}
permu([])
return result
}
let result = permutation(n: nums, r: m)
result.forEach {
$0.forEach { print($0, terminator: " ") }
print("")
}
재귀를 이용해 permutation 을 구현하여 풀긴했는데 남한테 설명하는게 너무 어렵다ㅜㅜ 재귀 복잡해