Files
baekjoon-study/workbook_8708/silver/1138-s2.py
2026-02-23 11:14:50 +09:00

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에서 차지한 칸을 지워주면 나오는 등수대로 잘 들어갈 수 있다.
"""