[백준(python)] 11870번 좌표 압축

구준희·2023년 10월 9일
0

알고리즘

목록 보기
18/31
post-thumbnail

📌 난이도, 유형

난이도 : 실버 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의 값을 딕셔너리에 있는 값으로 바꿔주고 출력하였다.

profile
꾸준히합니다.

0개의 댓글