[백준/파이썬] 18870번 좌표 압축 풀이

업데이트:



문제 정보


풀이

문제

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

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

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

  • 자세한 문제 및 입출력 예제는 상단의 문제 출처(백준 홈페이지)를 참조해주세요

코드

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])

설명

파이썬과 함께라면 쉬운 문제입니다.

문제에서 원하는 것은, 해당 값이 전체 집합에서 몇 번째로 낮은 숫자인지를 반환하는 것입니다.

이때, 순위를 내려면 정렬을 해서 조사를 하면 되는데, 문제는 중복이 있을 수도 있다는 점입니다.

보통이라면 중복이 나오면 넘기고 순위를 다시 매기는 루틴이 필요하겠지만, 파이썬은 set 자료구조를 기본적으로 지원해줍니다.

중복을 모두 없앤 후에, 또 기본적으로 지원해주는 정렬 함수를 이용해줍시다.

이제 정렬된 리스트에서 각 요소가 리스트의 몇 번째 요소인지 태그를 다는 작업을 딕셔너리로 해서, 입력받은 좌표를 변환시켜 출력하면 끝입니다.



댓글남기기