코딩테스트/Algorithm

[백준 python 18870] 좌표 압축

hu6r1s 2023. 12. 15. 19:36

[Silver II] 좌표 압축 - 18870

문제 링크

성능 요약

메모리: 144340 KB, 시간: 2216 ms

분류

값 / 좌표 압축, 정렬

제출 일자

2023년 12월 11일 22:09:08

문제 설명

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

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

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

입력

첫째 줄에 N이 주어진다.

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

출력

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

n = int(input())
li = list(map(int, input().split()))
sorted_li = sorted(set(li))
result = dict()
for i in range(len(sorted_li)):
    result[sorted_li[i]] = i
for i in li:
    print(result[i], end=" ")

풀이

좌표 압축에 대해서 먼저 알아야 한다.

이 방식으로 문제를 풀이해봤는데 틀리길래 확인해보니 이전과 같은 수이면 인덱스를 늘리지 않는다.

다시 풀어보니 제대로 나왔고 이 문제에 대해 더 자세히 찾아보니 각 수보다 작은 수의 개수를 세면 더 쉽게 구할 수 있었다.