https://school.programmers.co.kr/learn/courses/30/lessons/72411
문제 링크
import Foundation
func solution(_ orders:[String], _ course:[Int]) -> [String] {
var set = [String: Int]()
// 조합 찾기
func dfs(index: Int, origin: [Character], newString: String) {
if course.last! < newString.count{
return
}
if course.contains(newString.count) {
if set.keys.contains(newString) {
set[newString]! += 1
} else {
set[newString] = 1
}
}
for i in index..<origin.count {
let c = origin[i]
dfs(index: i+1, origin: origin, newString: "\(newString)\(c)")
}
}
// 탐색시작
for order in orders {
print(order)
let order = order.sorted()
print(order)
dfs(index: 0, origin: order, newString: "")
}
// 조합중 2번이상 선택받은 메뉴만 가능
// 최대값이 같으면 모두포함
var result = [String]()
for length in course {
// 조합의 길이가 코스와 같고 1번이상 손님이 사용한 것들
let temp = set.filter { $0.key.count == length && $0.value > 1 }
// 가장 많이 사용된 조합
let maxNum = temp.max { $0.value < $1.value }
// 가장 많이 사용된 조합의 횟수와 같은 횟수로 사용된 조합은 result에 담는다
let menu = temp.filter { maxNum!.value == $0.value }.map { $0.key }
result.append(contentsOf: menu)
}
return result.sorted()
}