18870. 좌표 압축
업데이트 시간 : 2025-06-25 09:34:52 +0000[Silver II] 좌표 압축 - 18870
성능 요약
메모리: 159320 KB, 시간: 1612 ms
분류
정렬, 값 / 좌표 압축
제출 일자
2025년 6월 25일 18:34:11
문제 설명
수직선 위에 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을 공백 한 칸으로 구분해서 출력한다.
💡 Solutions
📄 좌표 압축.py
import sys
input = sys.stdin.readline
n = int(input())
num_list = list(map(int, input().split()))
# 중복 제거 후 정렬
sorted_unique = sorted(set(num_list))
# 각 값에 대해 압축된 좌표를 딕셔너리에 저장
num_dict = {value: idx for idx, value in enumerate(sorted_unique)}
# 원래 리스트의 값들을 압축된 값으로 변환
rlt = [num_dict[num] for num in num_list]
print(*rlt)
####ㅇ 이전에 있던 병신같은 코드
import sys
input = sys.stdin.readline
n = int(input())
num_list = list(map(int, input().split()))
num_dict = dict()
for idx in range(n):
key = num_list[idx]
if key in num_dict:
num_dict[key].append(idx)
else:
num_dict[key] = [idx]
rlt = [ 0 for _ in range(n)]
min_num = min(num_list)
max_num = max(num_list)
num_list = list(set(sorted(num_list)))
num_list.sort()
# print(num_list)
# print(num_dict)
cnt = 0
for idx in range(len(num_list)):
for i in num_dict[num_list[idx]]:
rlt[i] = cnt
cnt += 1
print(*rlt)