백준 10974번을 스위프트로 풀면서 난관에 봉착했습니다.
파이썬에는 간단한 순열 & 조합이 스위프트엔 없다는 것이죠.
스위프트를 공부한 지 얼마 되지 않은 상황에서,
파이썬에선 기본함수인 걸 직접 구현해야 한다는 말은 꽤 충격으로 다가왔습니다.
많은 글을 찾아보고 참고하여,
순열 혹은 조합 문제가 주어졌을 때 제일 유용할만한 코드를 구현했습니다.
순열
Permutation
// 구현해놓은 Permutation 연습
func permute(_ nums: [Int], _ targetNum: Int) -> [[Int]] {
var result = [[Int]]()
var visited = [Bool](repeating: false, count: nums.count)
func permutation(_ nowPermute: [Int]) {
if nowPermute.count == targetNum {
result.append(nowPermute)
return
}
for i in 0..<nums.count {
if visited[i] == true {
continue
}
else {
visited[i] = true
permutation(nowPermute + [nums[i]])
visited[i] = false
}
}
}
permutation([])
return result
}
참고한 글 : https://icksw.tistory.com/180 | https://youseokhwan.me/blog/permutation-combination/ | t.ly/GtSn
조합
Combination
Ver 1
// 조합 연습(Ver 1)
func combi(_ nums: [Int], _ targetNum: Int) -> [[Int]] {
var result = [[Int]]()
var visited = Array(repeating: false, count: nums.count)
func combination(_ index: Int, _ nowCombi: [Int]) {
if nowCombi.count == targetNum {
result.append(nowCombi)
return
}
for i in index..<nums.count {
if visited[i] == true {
continue
}
else {
visited[i] = true
combination(i+1, nowCombi + [nums[i]])
visited[i] = false
}
}
}
combination(0, [])
return result
}
print(combi([3, 5, 10, 9, 22], 3))
Ver 2
// 구현해놓은 Combination 연습(Ver 2)
func combi(_ nums: [Int], _ targetNum: Int) -> [[Int]] {
var result = [[Int]]()
func combination(_ index: Int, _ nowCombi: [Int]) {
if nowCombi.count == targetNum {
result.append(nowCombi)
return
}
for i in index..<nums.count {
combination(i + 1, nowCombi + [nums[i]])
}
}
combination(0, [])
return result
}
참고한 글 : https://ssooyn.tistory.com/24 | t.ly/sW3F
코드 중 이해가 안 되는 부분이 있거나, 잘못된 부분이 있다면 편하게 댓글 부탁드립니다.
https://developer-p.tistory.com/146
https://developer-p.tistory.com/190
반응형
최근댓글