코드
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
s = sorted(arr)
d = dict()
for i in range(N):
if i == 0:
d[str(s[i])] = 0
continue
if s[i-1] == s[i]:
d[str(s[i])] = d[str(s[i-1])]
else:
d[str(s[i])] = d[str(s[i-1])] + 1
ans = list(map(lambda x: d[str(x)], arr))
print(" ".join(map(str, ans)))
결과
풀이 방법
- 좌표를 먼저 오름차순
정렬
한 다음, 순차적으로 0부터 순번을 매긴다
- 좌표가 정렬되어 있으므로 순번을 매길 때에는, 오른쪽 숫자가 왼쪽 숫자와 같으면 순번이 같고, 같지 않으면 순번이 1만큼 크다
- 정답을 출력할 때에는 원래 좌표의 순서에 맞게 순번을 출력해야 하므로 순번을 빠르게 찾기 위해
딕셔너리
를 활용하였다.