Skip to content

Latest commit

 

History

History
42 lines (35 loc) · 1.59 KB

level2-72411.md

File metadata and controls

42 lines (35 loc) · 1.59 KB

프로그래머스

  • 출처: 2021 KAKAO BLIND RECRUITMENT
  • 난이도: Level 2
  • 풀이 언어: Swift
  • 문제 요약: 단품메뉴들을 주어진 조건에 따라 코스요리 메뉴로 구성하기

코드

func solution(_ orders:[String], _ course:[Int]) -> [String] {
    var menuSet = [String: Int]()
    var result = [String]()
    
    func combination(origin: [Character], n: Int, resultString: String) {
        if course.contains(resultString.count) {
            menuSet[resultString] = (menuSet[resultString] ?? 0) + 1
        }
        for i in n + 1..<origin.count {
            combination(origin: origin, n: i, resultString: "\(resultString)\(origin[i])")
        }
    }
    for order in orders {
        let menus: [Character] = order.map { $0 }.sorted()
        for i in menus.indices {
            combination(origin: menus, n: i, resultString: "\(menus[i])")
        }
    }
    for n in course {
        let max = menuSet.filter { $0.key.count == n && $0.value > 1 }.values.max()
        result += menuSet.filter { $0.key.count == n && $0.value == max }.keys.map { $0 }
    }
    return result.sorted()
}

회고

  • 처음에는 백트래킹 알고리즘을 이용해 문제를 풀었다. 뭔가 정답이 제출되긴 했지만 풀면서도 '이게 맞아?'하는 생각이 드는 풀이였고 효율도 좋지 못했다.
  • 스터디원분들을 통해 훨씬 간단히 문제를 풀 수 있음을 알 수 있었다. 순열과 조합 문제를 좀 더 많이 풀어봐야겠다는 생각이 들었다.