난이도 : 실버 II
유형 : 정렬, 값/좌표 압축
시간제한 : 2초
메모리제한 : 512MB
n = int(input())
arr = list(map(int, input().split()))
arr2 = sorted(list(set(arr)))
dic = {value : index for index, value in enumerate(arr2)}
for idx, val in enumerate(arr) :
arr[idx] = dic[val]
print(" ".join(map(str,arr)))
문제 자체는 별로 어렵지 않다.
둘째 줄에 입력받은 값을 중복제거 후 오름차순으로 정렬하고 그 인덱스에 맞는 값들을 넣으면 된다.
[2, 4, -10, 4, -9]
정렬 후
[-10, -9, 2, 4, 4]
-10 = 0
-9 = 1
2 = 2
4 = 3
각각 값에 대입하면 [2,3,0,3,1]이 나온다.
하지만 N의 값이 100만이므로 시간복잡도를 고려해야 되기 때문에 딕셔너리를 이용했다.
dictionary = {value : index for index, value in enumerate(arr2)}
enumerate
를 이용해서 index는 '값', value는 '키'로 대응되게 하고 저장을 해주었다.
for idx, val in enumerate(arr):
arr[idx] = dic[val]
그 후 for문을 돌려서 arr의 값을 딕셔너리에 있는 값으로 바꿔주고 출력하였다.