[프로그래머스] 메뉴 리뉴얼 - Swift

이창형·2023년 6월 13일
0

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()
}

회고

  • 풀어지지가 않아서 블로그를 참고했습니다
  • 카카오는 lv2도 어렵네요..
  • 코드는 이해를 했기 때문에 다음에 또 다시 한 번 풀어야겠어요
profile
iOS Developer

0개의 댓글