728x90

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

 

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

 

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

from sys import stdin
N = int(input()); X = [int(i) for i in stdin.readline().rstrip().split()]
X_dict = {}
for idx, x in enumerate(sorted(list(set(X)))):
    X_dict[x] = str(idx)
print(' '.join([X_dict[i] for i in X]))

풀이 : 변환 시킬 좌표를 set함수로 중복을 없애준 뒤 sorted를 이용하여 순서대로 정렬해준다. 그 후에 정렬된 좌표값을 이용하여 딕셔너리를 생성해준다. 압축할 좌표 X를 조건에 맞춰 압축하여 출력해준다.

+ Recent posts