[Swift]伯俊11047-硬貨0
Greedyアルゴリズム
それぞれの選択の瞬間は、目の前の最適な選択だけをして、最終的な答えを達成するアルゴリズムです.
(これらの選択の結果が常に最適であることは保証できないが、階調アルゴリズムを適用する問題では最適である.)
例えば?
最小値を見つけるツリー構造があるとします. 3
4 2
1 6 5 10
ツリーが次のように表示される場合
グリディアルゴリズムは3−>2−>5を経て,5を最小値と判別した.
この例では、実際の最小値は1であるが、GRADYアルゴリズムでは、現在の最適選択は常に最適値であることが保証されるため、これは問題ではない.
白駿11047-硬貨0
問題のショートカット
に答える
これはグリディアルゴリズムを用いた代表的な問題である.
作るK元より小さいコインの中から一番大きい値を選べばいいです.
最終コード
import Foundation
let line = readLine()!.split(separator: " ").map{Int(String($0))!}
let N = line[0]
var K = line[1]
var coinArr = Array(repeating: 1000000, count: 10)
for i in 0..<N {
let coinValue = Int(readLine()!)!
coinArr[i] = coinValue
}
var count = 0
for i in (0..<N).reversed() {
let nowCount = K / coinArr[i]
K -= nowCount * coinArr[i]
count += nowCount
if K == 0 {
break
}
}
print(count)
3
4 2
1 6 5 10
import Foundation
let line = readLine()!.split(separator: " ").map{Int(String($0))!}
let N = line[0]
var K = line[1]
var coinArr = Array(repeating: 1000000, count: 10)
for i in 0..<N {
let coinValue = Int(readLine()!)!
coinArr[i] = coinValue
}
var count = 0
for i in (0..<N).reversed() {
let nowCount = K / coinArr[i]
K -= nowCount * coinArr[i]
count += nowCount
if K == 0 {
break
}
}
print(count)
Reference
この問題について([Swift]伯俊11047-硬貨0), 我々は、より多くの情報をここで見つけました https://velog.io/@sun02/Swift-백준-11047-동전-0テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol