본문 바로가기
알고리즘/정렬

[백준 -실버2] 18870번 좌표 압축(정렬, 파이썬)

by 호리미 2022. 2. 5.

https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net

 

<내 코드>

- 입력을 받은 후 nums배열에 값과 인덱스를 다시 저장해주었다.

- 그리고 값을 기준으로 정렬했다.

- 가장 작은 값부터 정렬 되기 때문에 다음 값과 값이 다를때 cnt를 하나씩 증가시키면서 결과 배열에 담았다.

import sys
input = sys.stdin.readline

n = int(input())
temp = list(map(int, input().split()))
nums = []
for i in range(n):
    nums.append([temp[i], i])
    
nums.sort(key = lambda x:x[0])

result = [0]*n
cnt = 0
for i in range(n-1):
    if nums[i][0] == nums[i+1][0]:
        result[nums[i+1][1]] = cnt
    else:
        cnt+=1
        result[nums[i+1][1]] = cnt
        
print(*result)