백준 문제 중 18870번, 정렬, ‘좌표압축’
백준 문제 중 18870번
https://www.acmicpc.net/problem/18870
문제
수직선 위에 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을 공백 한 칸으로 구분해서 출력한다.
풀이
n = int(input())
# 입력 길이를 [:n]로 제한
x = list(map(int,input().split()))[:n]
# set자료형으로 중복제거
m = set(x)
# m을 순서대로 정렬후 리스트로 저장
tmp = sorted(m)
# 딕셔너리 자료형 선언
ans = {}
i = 0
# tmp의 원소를 키로, i를 값으로 ans 구성
for t in tmp:
ans[t]=i
i+=1
for i in x:
print(ans[i],end=' ')
5
2 4 -10 4 -9
2 3 0 3 1
Leave a comment