본문 바로가기

PS

[BOJ] 18870번 좌표 압축 문제 - Python

www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

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

www.acmicpc.net

 

해당 수 보다 작은 수는 몇가지 인가? 를 묻는 문제다.

 

일단 중복은 안봐도 되니까 set으로 압축시켜서 다시 list로 바꾼다음에 역순으로 정렬한다.

 

해당 list의 길이가 서로 다른 숫자의 개수다. K라고 하고

 

큰수부터 K-1, K-2, K-3, ... 이렇게 너보다 작은게 이만큼 있다 라는 값을 dict에 저장한다.

 

그리고 새로 list 하나 만들어서 정답을 차곡차곡 쌓는다.

 

이건 코드를 보는게 이해가 빠를 수도 있겠다.

 


N = int(input())

numbers = list(map(int, input().split()))

number_set = list(set(numbers))
number_set.sort(reverse=True)

answer_dict = {}
tmp = len(number_set) - 1
for num in number_set:
    answer_dict[num] = tmp
    tmp -= 1

answer = [0] * N
for i in range(N):
    answer[i] = answer_dict[numbers[i]]

print(*answer)