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 |