【Python】AtCoder Beginner Contest 028 A,C問題 解答・解説

この記事は約2分で読めます。

A問題 テスト評価

 

C問題 数を3つ選ぶマン

方針

5つの数字から3つの数を選択して合計し、3番目に大きい数を出力する問題です。

5つの数字から3を選択したときの組み合わせの数は10個あります。

いわゆる5C3の計算だと思います。

10回のループを行い、各組み合わせの合計した数をリストに保存します。

組み合わせによっては合計した数が同じ数になるかもしれないので、set関数で重複を取り除きます。

その後、降順でソートしてから3番目に大きい数を出力しました。

解答①

math.comb()は組み合わせの数(10通り)が返ってきます。

解答②

itertools.combinations()では、for文と組み合わせて3つの変数を使うことで組み合わせの各要素を扱うことができます。math.comb()では組み合わせの数だけが返ってきます。

解答①とは違って、すべての組み合わせを保存したリスト(array)を使っていないので、こちらの解答の方がシンプルでわかりやすいですね。

ただ、重複を取り除く操作を行っていなくても正解しています。

合計した数が[5,5,4,3,・・・]などの場合、sum_array[2]とすると4が出力されて不正解になるような気もするのですが、3番目までに重複しないテストデータだけが使われていたのでしょうか。

コメント