본문 바로가기
Algorithm

SwiftUI: 할인 행사

by songmoro 2024. 3. 24.
728x90

프로그래머스 할인 행사

 

원하는 목록을 할인 목록에서 모두 구할 수 있는 회수가 몇 회인지 구하는 문제

 

원하는 목록의 수 만큼 할인 목록을 추가해서 원하는 목록 범위만큼 순회해서 구현

 

func solution(_ want:[String], _ number:[Int], _ discount:[String]) -> Int {
    var able = 0
    let count = number.reduce(0) { $0 + $1 }
    let list = Dictionary(uniqueKeysWithValues: zip(want, number))
    let discount = discount + Array(repeating: "", count: count)
    
    for i in 0..<(discount.count - count) {
        let dict = discount[i..<(i + count)].reduce(into: [:]) { partialResult, stuff in
            partialResult[stuff, default: 0] += 1
        }
        
        let isAble = list.reduce(into: []) {
            if $1.value > (dict[$1.key] ?? 0) {
                $0.append(0)
            }
        }.isEmpty
        
        able += isAble ? 1 : 0
    }
    
    return able
}

//    want    number    discount    result
//    ["banana", "apple", "rice", "pork", "pot"]    [3, 2, 2, 2, 1]    ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"]    3
//    ["apple"]    [10]    ["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"]    0
728x90

'Algorithm' 카테고리의 다른 글

SwiftUI: 가장 큰 수  (0) 2024.03.26
SwiftUI: n^2 배열 자르기  (0) 2024.03.25
SwiftUI: 괄호 회전하기  (0) 2024.03.23
SwiftUI: 멀리 뛰기  (0) 2024.03.22
SwiftUI: 예상 대진표  (0) 2024.03.21