40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
# 한 줄로 서기
|
|
|
|
import sys
|
|
|
|
input = sys.stdin.readline
|
|
|
|
def solution():
|
|
n = int(input().rstrip())
|
|
|
|
blank = [i for i in range(n)]
|
|
|
|
info = list(map(int, input().rstrip().split()))
|
|
|
|
result = [0] * n
|
|
for i in range(n):
|
|
result[blank[info[i]]] = i+1
|
|
blank.pop(info[i])
|
|
|
|
print(*result)
|
|
|
|
|
|
return
|
|
|
|
|
|
solution()
|
|
|
|
"""
|
|
걸린 시간: 25분
|
|
|
|
시간 복잡도: 원하는 것을 pop하는 것은 O(n)이 걸릴 수 있고, 그것을 n번 하므로 O(n^2)이다.
|
|
blank의 칸을 dict로 관리하면 O(n)으로 가능할 것 같다.
|
|
|
|
해설: 본인보다 키가 큰 사람이 왼쪽에 몇 명인지 안다는 것은 본인보다 모두가 키가 큰 구성에서는 몇 등인지 안다는 것이다.
|
|
그렇기 때문에 키가 1인 사람부터 등수를 구할 수 있고, 구한다음에는 1을 배제하고 2가 키가 제일 작은 구성에서 몇 등인지
|
|
구하는 방식으로 진행하면 된다.
|
|
이때, 이미 1이 차지한 등수를 제외하고 남은 칸들 중에 나온 등수대로 넣으면 된다.
|
|
따라서 빈 자리를 의미하는 blank 리스트에서 남는 칸들을 확인할 수 있고, info+1이 본인의 등수이지만 blank는 0부터 시작하므로
|
|
그냥 blank[info]를 하면 본인이 차지해야하는 칸이 나온다.
|
|
그 후 blank에서 차지한 칸을 지워주면 나오는 등수대로 잘 들어갈 수 있다.
|
|
""" |