diff --git a/workbook_8708/1138-s2.py b/workbook_8708/1138-s2.py new file mode 100644 index 0000000..880fb4c --- /dev/null +++ b/workbook_8708/1138-s2.py @@ -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에서 차지한 칸을 지워주면 나오는 등수대로 잘 들어갈 수 있다. +""" \ No newline at end of file