Coding Cantabile

[BOJ] #18870_좌표 압축(Python3, 파이썬) 본문

Coding Test/BOJ

[BOJ] #18870_좌표 압축(Python3, 파이썬)

Gracekim 2023. 1. 26. 18:31

본 게시글은 백준 저지 알고리즘 문제를 '파이썬, Python3' 언어로 풀이한 내용을 주관적으로 정리하였으며, 내용과 관련된 코드리뷰 및 피드백 환영합니다.

티어

Silver II

문제

수직선 위에 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을 공백 한 칸으로 구분해서 출력한다.

제한

1 ≤ N ≤ 1,000,000
-109 ≤ Xi ≤ 109

예제 입력 및 출력 1

5
2 4 -10 4 -9
2 3 0 3 1

예제 입력 및 출력 2

6
1000 999 1000 999 1000 999
1 0 1 0 1 0

풀이

import sys
n = int(input())

nums = list(map(int, sys.stdin.readline().rstrip().split())) # 좌표 받기

numset = set(nums) # 중복 제거
a = list(numset) # 리스트로 만들고
a.sort() # 정렬

numdict = {} 
# 순서를 부여
for i in range(len(a)):
    numdict[a[i]] = i

for i in nums:
    print(numdict[i], end=' ')

좌표 압축이란 것은, 여러 군데에 있는 좌표를 연속된 수들로 모아서 압축하는 것을 뜻한다. 

좌표 압축을 위해서는 수들을 입력받고, 집합(Set)으로 중복을 제거시킨 후, 정렬을 한 다음, 각 수와 인덱스를 저장해 출력해주면 된다.