AtCoder Beginner Contest 217 解説【Python】

どうもこんにちは、Megです。

Meg

機械学習を専門に勉強している、理系男子大学生です。

大学の学部では生命工学を学び、男子の中で成績1位を取るほどの勉強好き。

主に生機械学習と生活改善を中心に、日々の学びで得た知識やヒントをブログで共有していきます!

Megをフォローする

今回はAtCoder Beginner Contest 217の解説をPythonで行っていきます。

A – Lexicographic Order

問題はこちら

コードは以下です!自分の提出はこちら

st_list = list(input().split())

arrange_list = sorted(st_list)

if arrange_list[0] == st_list[0]:
    print('Yes')
else:
    print('No')

コード解説

  • 1行目
    $S, T$2つの文字列を一つのリストで受け取ります。
    Ex) st_list = ['arc', 'agc']
  • 3行目
    sorted()でst_list内の語句を辞書順に並び替えたリストをarrange_listとします。
    Ex) arrange_list = ['agc', 'arc']
    sorted() についての参考サイト
Pythonの並べ替えを使う
  • 5~8行目
    $S$が$T$よりも辞書順で小さい場合とは、すなわち、st_listとarrange_listの先頭の文字列が同一となるときです。
    よってコードは arrange_list[0] == st_list[0]を条件として書けます。
    後は、Yes or Noをif else文で記述するだけです。

B – AtCoder Quiz

問題はこちら

コードは以下です!自分の提出はこちら

AtCoder_contest = ['ABC', 'ARC', 'AGC', 'AHC']

s_list = [input() for _ in range(3)]
ans = list(set(AtCoder_contest) - set(s_list))
print(ans[0])

コード解説

  • 1行目
    あらかじめ、$4$つのコンテストの文字列リストを用意しておきます。

  • 3行目
    $S_1, S_2, S_3$は3行で与えられているので内包表記でs_listに一つずつ格納していきます。

  • 4行目
    set()を用いて集合演算を行います。今回はAtCoder_contestリストからs_listに含まれていないものを出力するので-演算子を使います。
    後の出力のために、リストに答えを格納しておきます。

例1を図示してみました。
  • 5行目
    最後はprint文で出力します。

C – Inverse of Permutation

問題はこちら

コードは以下です!自分の提出はこちら

n =int(input())
q_list = [0]*n

p_list = list(map(int, input().split()))

for i in range(n):
    q_list[p_list[i]-1] = i+1

print(*q_list)

コード解説

  • 1行目
    $N$を整数型で受け取ります。
  • 2行目
    順列$Q$を出力するため、全ての要素が$0$である長さ$N$のリストを用意します。
    参考にしたサイト
Pythonのリスト(配列)を任意の値・要素数で初期化 | note.nkmk.me
Pythonのリスト(配列)を任意の値・要素数で初期化する方法を説明する。空リストを作成 任意の値・要素数で初期化 2次元配列(リストのリスト)を初期化する際の注意 タプル、配列(array型)の場合 NumPy配列numpy.ndarrayの初期化については以下の記事を参照。関連記事: NumPyで全要素を同じ値で初...
  • 4行目
    順列$P$の入力をリストで受け取ります。
  • 6~7行目
条件を図示するとこうなります

p_listにより、q_list上で$i$の数字が入る場所を指定しているという構造です。これに気を付けて条件式に書き下すと7行目のようになります。

参考にしたサイト

Pythonで変数やリストの値を入れ替え(交換・並べ替え) | note.nkmk.me
Pythonでは値の入れ替え(交換、スワップ)が簡単にできる。変数の値を入れ替えたり、リストの要素の値を入れ替えて並べ替えたりすることが可能。以下のように書ける。tempみたいな一時的な変数を用意する必要がなく、非常にスマート。同様に複数の変数への値の代入を一行で書ける。関連記事: Pythonで複数の変数に複数の値....
  • 9行目
    q_listの要素を空白を開けながら全て出力するには、出力したい任意のリストの前に*をつけるだけで良いです。
    参考にしたサイト
リストの中身を空白であけて並べて簡潔に出力したいです。
### 前提・実現したいこと リストがあるとき、空白で文字の間を空けて a b c ... n というように出力したいのですが 以下の方法より

D – Cutting Woods

問題はこちら

誠意記事作成中です。

E – Sorting Queries

問題はこちら

誠意記事作成中です。

F – Make Pair

問題はこちら

誠意記事作成中です。

G – Groups

問題はこちら

誠意記事作成中です。

H – Snuketoon

問題はこちら

誠意記事作成中です。

タイトルとURLをコピーしました