코딩 기록 저장소

[백준/Python] 18870번 : 좌표 압축 본문

백준/정렬

[백준/Python] 18870번 : 좌표 압축

KimNang 2023. 9. 5. 16:19

문제 정보

제목 : 좌표 압축

번호 : 18870번

사용 언어 : Python

문제 링크

https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에

www.acmicpc.net

 

시간 제한 메모리 제한
2 초 512 MB

 

문제

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

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

X₁, X₂, ..., XN에 좌표 압축을 적용한 결과 X'₁, X'₂, ..., X'N를 출력해보자.

 

입력

첫째 줄에 N이 주어진다.

둘째 줄에는 공백 한 칸으로 구분된 X, X, ..., XN이 주어진다.

 

출력

첫째 줄에 X', X', ..., X'N을 공백 한 칸으로 구분해서 출력한다.

 

입출력 예제

 

제한

  • 1 ≤ N ≤ 1,000,000
  • -10⁹ ≤ X ≤ 10⁹

 


나의 풀이

입력에 대한 시간을 줄이기 위해 sys.stdin.readline()을 사용했습니다. N을 입력받아 정수형으로 변환하여 저장합니다. 공백으로 구분된 XN를 입력받아 split()로 나누어 리스트로 X에 저장합니다. 압축된 x를 저장할 Compressed_X를 딕셔너리 형태로 선언합니다.

for 루프를 이용해 리스트 X를 set으로 변환하여 중복을 제거하고, 다시 list형으로 변환하여 정렬한 후 순차적으로 접근합니다. 이때 기존의 X 형태는 달라지지 않습니다. Compressed_X에 i를 키로 하여 count를 저장합니다. 그리고 count는 1을 증가시킵니다. 모든 반복이 끝나면 리스트 X에 순차적으로 접근하는 for루프를 이용해 Compressed_X[i]로 알맞은 값을 출력합니다.

 

코드

import sys
input = sys.stdin.readline

N = int(input())
X = list(map(int,input().split()))
Compressed_X = dict()

count = 0
for i in sorted(list(set(X))) :
    Compressed_X[i] = count
    count += 1

for i in X :
    print(Compressed_X[i], end= " ")
 
 

 

'백준 > 정렬' 카테고리의 다른 글

[백준/Java] 1181번: 단어 정렬  (0) 2023.04.10