ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

AtCoder-ABC217 C - Inverse of Permutation【Python解答例】

AtCoder Beginner Contest217のC問題についてPythonの解答例を記事にしていきます。
AtCoder Beginner Contest 217 - AtCoder


AtCoder Beginner Contest217 C - Inverse of Permutation

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