조합은 for 문으로 구현할 수도 있지만 dfs 로도 경우의 수를 만들어낼 수 있습니다
import Foundation
func solution(_ orders:[String], _ course:[Int]) -> [String] {
var menus: [String:Int] = [:]
for order in orders {
let ordered = order.sorted()
for courseSize in course {
let combinations = makeCombination(courseSize, ordered)
for combination in combinations {
let combi = String(combination)
menus[combi, default: 0] += 1
}
}
}
var result: [String] = []
for courseSize in course {
let filtered = menus.filter { $0.value >= 2 && $0.key.count == courseSize }
let maxCount = filtered.values.max() ?? 0
let filtered2 = filtered.filter { $0.value == maxCount }
result.append(contentsOf: filtered2.keys)
}
return result.sorted()
}
func makeCombination(_ n: Int, _ array: [Character]) -> [[Character]] {
var result: [[Character]] = []
func dfs(_ index: Int, _ combinations: [Character]) {
if n == combinations.count {
result.append(combinations)
return
}
for i in index..<array.count {
dfs(i + 1, combinations + [array[i]])
}
}
dfs(0, [])
return result
}
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 - 최솟값 만들기 (0) | 2024.10.13 |
---|---|
프로그래머스 - 올바른 괄호 (0) | 2024.10.10 |
프로그래머스 - k진수에서 소수 개수 구하기 (0) | 2024.10.05 |
프로그래머스 - 튜플 (0) | 2024.10.05 |
프로그래머스 - [1차] 캐시 (1) | 2024.10.04 |