AtCoder-ABC217 C - Inverse of Permutation【Python解答例】
AtCoder Beginner Contest217のC問題についてPythonの解答例を記事にしていきます。
AtCoder Beginner Contest 217 - AtCoder
AtCoder Beginner Contest217 C - Inverse of Permutation
問題文
1,2,…,N が 1 回ずつ現れる長さ N の数列を「長さ N の順列」と呼びます。
長さ N の順列 P=(p 1 ,p 2 ,…,p N ) が与えられるので、以下の条件を満たす長さ N の順列 Q=(q 1 ,…,q N ) を出力してください。
・全ての i (1≤i≤N) に対して Q の p i 番目の要素が i である。
ただし、条件を満たす Q は必ずただ 1 つ存在することが証明できます。
制約
・1≤N≤2×10 ^5
・(p 1 ,p 2 ,…,p N ) は長さ N の順列である。
・入力は全て整数である。
解答例
n = int(input()) P = list(map(int, input().split())) Q = [0] * n for i in range(n): Q[P[i]-1] = i+1 print(*Q)
解説
問題文のように処理するため長さNで要素が0で初期化された配列Qを用意します。
QをP[i]番目の要素がiである配列としたいので、Q[P[i]-1] = i+1という処理をN個の要素に対して行います。
配列のインデックスは0からはじまるので注意が必要です。
最後にQの各要素を空白区切で出力すればOKでした。
(この出力の仕方は便利なのですぐに思い出せるようにしたいです)
ABC217の関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com