[프로그래머스 LV2] 할인 행사

Junyoung Park·2022년 11월 29일
0

코딩테스트

목록 보기
627/631
post-thumbnail

1. 문제 설명

할인 행사

2. 문제 분석

  • 구매할 목록을 딕셔너리를 통해 관리한다. 10일 동안의 할인 품목 또한 딕셔너리로 관리해서, 후자에 전자 딕셔너리 값이 포함(값이 이상)이라면 구매 가능한 날짜로 볼 수 있다. 후자의 딕셔너리는 하루가 지날 때마다 가장 처음 앞 날의 물품은 빼주고, 다가올 날짜의 물품은 더해주자.

3. 나의 풀이

import Foundation

func solution(_ want:[String], _ number:[Int], _ discount:[String]) -> Int {
    var dict = [String:Int]()
    var discountDict = [String:Int]()
    for index in 0..<10 {
        let item = discount[index]
        let number = discountDict[item] ?? 0
        discountDict[item] = number + 1
    }
    for index in 0..<want.count {
        let wantItem = want[index]
        let wantNumber = number[index]
        dict[wantItem] = wantNumber
    }
    
    func isDiscountable() -> Bool {
        for item in dict {
            let key = item.key
            let value = item.value
            let discountValue = discountDict[key] ?? 0
            if discountValue < value {
                return false
            }
        }
        return true
    }
    var answer = 0
    
    if isDiscountable() {
        answer += 1
    }
    for index in 10..<discount.count {
        let removed = discount[index-10]
        let added = discount[index]
        discountDict[removed] = (discountDict[removed] ?? 0) - 1
        discountDict[added] = (discountDict[added] ?? 0) + 1
        if isDiscountable() {
            answer += 1
        }
    }
    
    return answer
}
profile
JUST DO IT

0개의 댓글