Python 技術ログ

毎日Python_22日目


【ページ更新日:2020年10月28日】

毎日Pythonでは、簡単なPythonのプログラムコードを紹介していきます。

今日のプログラムはAtCorder2019の問題を使用しています。

競技用プログラミングの問題になります。

問題

問題は次のとおりです。

あなたは、N人の社員、社員1,…,Nを3つ以下のグループに最適に分割するプログラムを作ろうとしている。

すでに、社員のペア( i , j )(1≦i<j≦N)すべてに対して、彼らを同じグループに含めた際に生じる幸福度 Aij(正とは限らない)がAIによって計算されている。グループ分けの好ましさを、同じグループに含まれる社員のペア( i , j )すべてに対するAijの総和(そのようなペアが存在しなければ0)と定義する。グループ分けの好ましさの最大値を求めよ。

<制約>
2≦N≦10
−1,000,000≦Aij≦1,000,000
入力中の値はすべて整数である。

AtCorder 第一回アルゴリズム実技検定過去問2019年12月G問題

プログラムコード

問題の解答となるコードは次のとおりです。

※間違いの指摘やアドバイスなどあれば教えてください。

N = int(input("データ数を入力してください >>> "))

list = []
check_list = [0] * N
flag = 0

for i in range(N):
    m = int(input())
    list.append(m)
    check_list[m-1] += 1

for i in range(N):
    if check_list[i] == 0:
        print ("{} が {} に書き換えられた".format(i+1,check_list.index(2)+1))
        flag = 1

if flag == 0:
    print("Correct")

ポイント

今回のPythonコードのポイントは次の1点です。

  • リストの初期化:check_list = [0] * N
  • indexメソッド

リストの初期化「要素数を決める」

次のようにすることで、要素0を定数N個にすることができる。

check_list = [0] * N

たとえば、N=5のとき要素数5のリストができる。

# 要素数5のリストをつくる
check_list = [0] * 5
# => check_list = [0,0,0,0,0]

リストのindexメソッド

indexメソッドは、指定した要素をもつインデックス番号を返します。

今回のコードでは次のように使用されていました。

print ("{} が {} に書き換えられた".format(i+1,check_list.index(2)+1))

リファクタリング

調べながら、より短くしてみました。

リファクタリング

リファクタリング (refactoring) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

リファクタリングしたコードを紹介したいと思います。

コードは次のとおりです。

alist = [int(input()) for _ in range(6)]
alist.sort(reverse = True)
print(f"3番目に大きい数は {alist[2]} です")
  • この記事を書いた人
  • 最新記事

Maita Tomoya / yone

2020.4~Webアプリケーションエンジニアとして都内の企業で働き、空いている時間でブログを運営している29歳男です。本ブログは情報の整理をするため、文章を書く機会を作るために始めました。1記事でも多く「誰かのためになる記事」を書けるように頑張ります!転職前は地方の高校で働いていました。教育関係の記事も定期的に書いていきたいと思います。

-Python, 技術ログ