HIT해
[Swift] 조합 본문
728x90
중복없는 Target에서 원하는 만큼의 조합 구하기
var oper = ["+","-","x"]
var oop = [[String]]()
// 조합의 경우의 수
func combi(_ targetArr : [String], _ arr:[String]) {
if arr.count == 3 {
oop.append(arr)
return
}
for i in 0...2{
if !arr.contains(oper[i]){
combi(targetArr, arr + [targetArr[i]])
}
}
}
combi(oper,[])
targetArr과 시작할때 빈배열을 넣어 append가 아닌 잠시 합치는 방식으로 넘겨준다.
주의할 점은
combi(targetArr, arr + targetArr[i])
이걸로하면 배열과 배열의 합치기가 아닌 Array + String이 되기에 인자가 배열로서 들어가지 못하게 된다.
combi(targetArr, arr + [targetArr[i]])
이렇게 배열안에 넣어서 합친값을 넘겨주자.
중복있는 Target에서 원하는 만큼의 조합 구하기
중복이 있어도 되는 조합에서는 contains로 확인하는게 아닌 index를 건너뛰는 방식으로 해결해야한다.
인자로 현재 index + 1 값을 넘겨주고 해당 인덱스 부터 끝까지 반복문을 돌며 해결한다.
func combinationWithDuplicates(_ targetArr: [String], _ arr: [String], _ start: Int) {
// 기저 조건: 현재 배열의 길이가 3이면 결과에 추가
if arr.count == 3 {
result.append(arr)
return
}
// start 인덱스부터 시작하여 재귀적으로 조합 생성
for i in start..<targetArr.count {
combinationWithDuplicates(targetArr, arr + [targetArr[i]], i) // 다음 반복에서도 현재 인덱스부터 시작
}
}
let numbers = ["1", "2", "3"]
result = [] // 결과 배열 초기화
combinationWithDuplicates(numbers, [], 0)
'Swift > Swift 알고리즘' 카테고리의 다른 글
[Swift/프로그래머스] 수식 최대화 ( 그리디 , 연산 ) (0) | 2024.11.02 |
---|---|
[Swift] 순열 (0) | 2024.11.02 |
[Swift/프로그래머스] N으로 표현 ( 그리디 , 연산 ) (0) | 2024.11.01 |
[Swift/프로그래머스] 타겟 넘버 ( BFS , 연산 ) (0) | 2024.11.01 |
[Swift/프로그래머스] 마법의 엘리베이터 ( 그리디 , 연산 ) (0) | 2024.11.01 |