티스토리 뷰


문제

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.

X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.

 

입출력 규칙

1. 입력

첫째 줄에 N이 주어진다.

둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.


2. 출력

첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.

 


문제 풀이

<내 풀이>

 

- 입력받은 리스트의 중복을 제거한 후, 오름차순으로 정렬한 리스트를 만든다 (x_list_sort)

- 그리고, 숫자 순위 매핑하는 딕셔너리를 만든다.

   각 숫자에 대해 그 숫자가 정렬된 리스트에서 몇 번째 인덱스인지 알면 몇 개의 숫자보다 큰지 알 수 있다.

- 원래의 리스트인 x_list를 순회하며, 각 숫자에 대해 딕셔너리에서 매핑된 값을 찾아 출력한다.

import sys

x = int(input())
x_list = list(map(int,sys.stdin.readline().rstrip().split()))

x_list_sort = sorted(set(x_list))
dic = {x_list_sort[i]:i for i in range(len(x_list_sort))}

for x in x_list:
    print(dic[x],end=' ')

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함