[백준][Python] 18870. 좌표 압축
Silver Ⅱ 🔗18870. 좌표 압축
📝문제 요약
문제
수직선 위에 N개의 좌표 X₁, X₂, …, Xₙ이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xi를 좌표 압축한 결과 X’i의 값은 Xᵢ > Xⱼ를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.
X₁, X₂, …, Xₙ에 좌표 압축을 적용한 결과 X’₁, X’₂, …, X’ₙ를 출력해보자.
입력
첫째 줄에 N이 주어진다.
둘째 줄에는 공백 한 칸으로 구분된 X₁, X₂, …, Xₙ이 주어진다.
출력
첫째 줄에 X’₁, X’₂, …, X’ₙ을 공백 한 칸으로 구분해서 출력한다.
제한
- 1 ≤ N ≤ 1,000,000
- -10 ⁹≤ Xᵢ ≤ 10⁹
✏️문제 풀이
- 입력
- 좌표의 개수
n
을 입력 - n개의 좌표를 공백으로 구분하여 입력받아 리트스
x
에 저장
- 좌표의 개수
set()
을 사용하여x
의 중복을 제거하고 오름차순 정렬- 딕셔너리 컴프리헨션을 사용
- 각 좌표값 : 키
- 그 좌표의 인덱스 : 값
- 원래 입력받은 좌표 순서대로 각 좌표의 압축된 순위를 출력
코드와 함께 보는 풀이
# 좌표의 개수 n을 입력
n = int(input())
# n개의 좌표를 공백으로 구분하여 입력받아 리트스 x에 저장
x = list(map(int, input().split()))
# set()을 사용하여 x의 중복을 제거하고 오름차순 정렬
x_sort = sorted(set(x))
# 각 좌표값 : 키, 그 좌표의 인덱스 : 값 으로 하여 딕셔너리로 저장
x_dict = {x_sort[i]: i for i in range(len(x_sort))}
# 원래 입력받은 좌표 순서대로 각 좌표의 압축된 순위를 출력
for i in x:
print(x_dict[i], end=' ')
💯제출 코드
n = int(input())
x = list(map(int, input().split()))
x_sort = sorted(set(x))
x_dict = {x_sort[i]: i for i in range(len(x_sort))}
for i in x:
print(x_dict[i], end=' ')
댓글남기기