728x90
문제) 수직선 위에 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을 공백 한 칸으로 구분해서 출력한다.
from sys import stdin
N = int(input()); X = [int(i) for i in stdin.readline().rstrip().split()]
X_dict = {}
for idx, x in enumerate(sorted(list(set(X)))):
X_dict[x] = str(idx)
print(' '.join([X_dict[i] for i in X]))
풀이 : 변환 시킬 좌표를 set함수로 중복을 없애준 뒤 sorted를 이용하여 순서대로 정렬해준다. 그 후에 정렬된 좌표값을 이용하여 딕셔너리를 생성해준다. 압축할 좌표 X를 조건에 맞춰 압축하여 출력해준다.
'코딩 공부 > 파이썬' 카테고리의 다른 글
백준) 25285 - 심준의 병역판정검사 [파이썬 3] (0) | 2022.07.02 |
---|---|
백준) 1011 - Fly me to the Alpha Centauri [파이썬] (0) | 2022.06.28 |
백준) 10816 - 숫자 카드 2 [파이썬] (0) | 2022.06.24 |
백준) 1620 - 나는야 포켓몬 마스터 이다솜 [파이썬] (0) | 2022.06.23 |
백준) 1018 - 체스판 다시 칠하기 [파이썬] (0) | 2022.06.19 |