728x90
입력 받은 숫자를 오름차순으로 정렬하고
중복을 없애 인덱스 값으로 치환하는 문제
출력은 원래 받은 숫자의 순서대로 치환한 값을 출력하기
더보기
문제
수직선 위에 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을 공백 한 칸으로 구분해서 출력한다.
제한
- 1 ≤ N ≤ 1,000,000
- -109 ≤ Xi ≤ 109
숫자를 리스트에 저장하고
리스트를 집합으로 저장한 후 정렬해서 다시 리스트로 만들어서 숫자를 key, 인덱스를 value로 저장
처음 생성한 리스트의 숫자로 방금 만든 딕셔러니의 값을 불러서 출력
import sys
def f(X):
d = {x:str(i) for i, x in enumerate(sorted(set(X)))}
print(" ".join([d[x] for x in X]))
sys.stdin.readline()
X = list(map(int, sys.stdin.readline().split()))
f(X)
더보기
예제 입력 1
5
2 4 -10 4 -9
예제 출력 1
2 3 0 3 1
예제 입력 2
6
1000 999 1000 999 1000 999
예제 출력 2
1 0 1 0 1 0
'IT > Python' 카테고리의 다른 글
[프로그래머스] Lv.1 덧칠하기 [Python] (0) | 2023.09.21 |
---|---|
[프로그래머스] Lv.1 실패율 [Python] (0) | 2023.09.20 |
[백준] 11724번 연결 요소의 개수 [Python] - 그래프 이론 (0) | 2023.09.19 |
[백준] 2630번 색종이 만들기 [Python] - 재귀 (0) | 2023.09.19 |