#競プロの練習
某競プロサイトの初心者用のCard Game for Two
を解いてみた。
結論から言うとできませんでした。
自分なりにアルゴリズムを考えた結果がこちらです。
- for文でカードを取り出す
- アリスが取ったカードの合計値からボブか取ったカードの合計値を引いた値を出力すればいいと思った
- 最大値を交互に取り出す記述を作レバいいと思った
- これは思いつきはしたが使用しなかったのですが、sortのreserve=Trueを使えば入力した値を最大値の順番でリストにしていくことができると思った。
自分なりに1〜3を記述しようと考えてfor文を使ったりwhile文を使ってができなかったので解答を見てみた。
解答
Python
n = int(input())
a = sorted(list(map(int, input().split())), reverse=True)
print(sum(a[::2]) - sum(a[1::2]))
これを思い付いた人は凄いと思った。
複雑なことをせずにsortとスライスとsumを使って結果を出しているのが凄いと思いました。
感想
自分に近い考え方としてfor文を使った解答もありましたが、今回参考にさせてもらったコードを見て、pythonの基本的な文法をまだまだ理解できてないことがわかったので、これを糧としてもっと基本に忠実に複雑に考えすぎないようにしていきたいと思いました。