[Sart]Boj 1015:数列ソート
1907 ワード
[Sart]Boj 1015:数列ソート
Link: https://www.acmicpc.net/problem/1015
質問する
P[0], P[1], ...., P[N−1]は0からN−1(含む)まで一度の数列である.数列Pは長さNの配列Aに適用され、長さNの配列Bとなる.適用できる方法はB[P[i]=A[i]です.
配列Aが与えられると、適用配列Pの結果が降順でない配列を検索するプログラムを作成します.雨量降順とは、各元素が前の元素より大きいか等しいかを指す.そのような数列が複数ある場合、出力は辞書順にリードします.
入力
第1行は、配列AのサイズNを与える.2行目では、配列Aの要素はゼロから順に与えられる.Nは50以下の自然数であり、配列された要素は1000以下の自然数である.
しゅつりょく
1行目は降雨順に生成された数列Pを出力する.
I/O例
問題を理解する
Code | Python
import sys
si = sys.stdin.readline
N = int(si())
A = list(map(int,si().split()))
sortList = [[] for _ in range(N)]
#입력 받은 리스트 A의 값과 그 인덱스를 함께 저장해준다.
for i in range(N):
sortList[i].append(i)
sortList[i].append(A[i])
#A의 값을 기준으로 정렬해준다.
sortList.sort(key = lambda x:x[1])
#정렬된 리스트에 다시 한번 현재 인덱스(P값)를 append 해준다.
for i in range(N):
sortList[i].append(i)
#가장 처음 리스트 A의 인덱스 순서대로 정렬 후, 마지막에 구한 P값을 출력한다.
for x in sorted(sortList,key = lambda x:x[0]):
print(x[2], end = ' ')
Screenshot | Output
より良いコード
import sys
si = sys.stdin.readline
n = int(si())
A = list(map(int, sys.stdin.readline().split()))
B = [(x, i) for i, x in enumerate(a)]
B.sort()
P = [0 for _ in range(n)]
for i in range(n):
P[B[i][1]] = i
for i in range(n):
print(P[i], ' ')
Reference
この問題について([Sart]Boj 1015:数列ソート), 我々は、より多くの情報をここで見つけました https://velog.io/@kakasi18/Sort-Boj1015-수열-정렬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol