본문 바로가기
기술/Problem Solving

[baekjoon] 18870번 좌표 압축

by 팡팡구리 2021. 7. 1.
반응형

출처


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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

 

문제


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

 

 

 

풀이 및 코드


Set 형태로 바꿔 정렬해준 뒤

탐색이 용이하도록 Dictionary 형태로 만들었고 이때, 작은 값부터 0으로 시작하도록 key값을 부여했다.

 

내 풀이

n = int(input())
arr = list(map(int, input().split()))
# set()으로 형태 변환 후 정렬
set_arr = sorted(set(arr))

# dictionary로 작은 값부터 0으로 시작하도록 value 부여
dictionary = dict()
for i in range(len(set_arr)):
    dictionary[i] = set_arr[i]

# search가 쉽도록 key와 value를 map()으로 변경
dictionary = dict(map(reversed, dictionary.items()))

for i in arr:
    print(dictionary[i], end=' ')

 

개선점

Dictionary Comprehension을 썼으면 굳이 key, value 변경 작업을 안 해줘도 됐었다.

dict() 함수로 선언하는 것보다는 {}로 선언하는 습관을 들여야겠다.

# 아래처럼 key, value를 바꿔주는 작업없이
dictionary = dict()
for i in range(len(set_arr)):
    dictionary[i] = set_arr[i]

dictionary = dict(map(reversed, dictionary.items()))

# 딕셔너리를 선언하면서 Dictionary Comprehension을 하면 됐었다.
dictionary = {set_arr[i] : i for i in range(len(set_arr))}