폴더 분리
This commit is contained in:
40
workbook_8708/silver/1138-s2.py
Normal file
40
workbook_8708/silver/1138-s2.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# 한 줄로 서기
|
||||
|
||||
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에서 차지한 칸을 지워주면 나오는 등수대로 잘 들어갈 수 있다.
|
||||
"""
|
||||
Reference in New Issue
Block a user