Python 技術ログ

毎日Python_19日目


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

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

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

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

問題

問題は次のとおりです。

長さNの整数列がサーバーに保管されている。つい先ほどまで、この列には1からNまでの整数が1個ずつ含まれていた。

しかし、たった今発生したトラブルにより、列のいずれか1個の要素が別の1以上N以下の整数に書き換えられた可能性がある。あるいは、何の書き換えも発生しなかったかもしれない。

トラブル発生後の整数列A1,…,ANが与えられる。これを読み込み、書き換えが発生していたかを判定し、発生していた場合にはどの整数がどの整数に書き換えられたかを報告するプログラムを作成せよ。書き換えが発生していなかった場合、Correct と出力せよ。

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

プログラムコード

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

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

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, 技術ログ