#はじめに
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
こちらの記事を参考に初心者がAt corderに挑戦します。
目的としては、就職活動でのコーディングテスト対策です。
毎日1問を目標としてコツコツやってきます
わからないことは調べる精神です。ちょっとでもわからないなぁ、と思ったことは調べて解説と参考文献を載せますので、同じ内容でわからない人がいれば参考にししてください
N枚のカードがあり、i番目のカードにはa_iと番号が振られる。二人のプレイヤー(問題中はAliceとBob)がお互い数字が見えている状態で、交互にカードを選択する。選択するカードが無くなったとき、自分が持っているカードに書かれている数字の合計が得点となる。自分の点数が最大化するように最適な戦略を取った場合、先手(問題文中はAlice)は後手に対し、何点多く得点するか?
##制約
Nは1以上100以下の整数
$a_i$は1以上100以下の整数
##入力
N
a1 a2 a3 ... aN
##出力
先手が後手よりも多く獲得した点数を出力
###入力例
2
3 1
###出力例
2
先手が3を選択、後手が1を選択する。点数は3と1なので、点差は3-1=2となる。
#回答
N = gets
numbers = gets.split.map(&:to_i)
alicepoint = 0
bobpoint = 0
while numbers.any?
alicepoint += numbers.max
numbers.delete_at(numbers.index(numbers.max))
if numbers.empty?
break
end
bobpoint += numbers.max
numbers.delete_at(numbers.index(numbers.max))
end
puts alicepoint - bobpoint
#感想
最近は他の人の回答を回答を見る前に通るプログラムが書けるようになってきたぞ。まだまだメソッド等の使い方は覚えられていないので、調べながら出ないと厳しいな。
変数を頭文字大文字にしていたことで値を更新できず(alicepointとbobpointが頭文字大文字だった)🙄
大文字小文字をちゃんと識別しているのにちょっとびっくり。今後は注意だ!
#参考文献