## 문제
n개의 좌표가 주어질때, 좌표를 압축하여 대소관계를 유지하는 간단한 수로 바꾸길 원하는 문제로 보인다.
제한사항에 N이 1,000,000 보다 같거나 작으므로 O(nlogn)인 정렬까지는 사용 가능해 보인다.
## code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
num = sys.stdin.readline() | |
input = lambda : sys.stdin.readline().split() | |
l = list(map(int,input())) | |
l2 = list(set(l)) | |
l2.sort() | |
# 키 값을 순서대로 준다 | |
n = 0 | |
dict = {} | |
for tmp in l2: | |
dict[tmp] = n | |
n += 1 | |
convert = [] | |
for tmp in l: | |
convert += [dict[tmp]] | |
convert = list(map(str,convert)) | |
print(' '.join(convert)) |
코드에서 l2를 만들어서 정렬할때, 정렬 이전에 set로 잠시 만들어서 중복된 것을 제외해야 한다. 정렬 이후 set로 바꾸면 정렬한 순서가 망가진다.
```python
n=int(input())
x=list(map(int,input().split()))
xt=list(sorted(set(x)))
xt={xt[i]:i for i in range(len(xt))}
print(*[xt[i] for i in x])
```
밑에서 두번째 줄로 대소관계에 따른 값을 쉽게 줄 수 있다. dictionary 안에도 for문 저렇게 활용 가능하다.
print(1,2,3) 출력시 1_2_3 (_는 space) 를 출력하므로
unpacking 해서 쉽게 출력 가능하다
0 댓글