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
}