반응형
출처
https://www.acmicpc.net/problem/18870
문제
수직선 위에 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))}
'기술 > Problem Solving' 카테고리의 다른 글
[baekjoon] 1966번 프린터 큐 (0) | 2021.07.11 |
---|---|
[programmers] 삼각달팽이 (0) | 2021.07.03 |
[baekjoon] 1541번 잃어버린 괄호 (0) | 2021.07.01 |
[baekjoon] 11404번 플로이드 - 플로이드 워셜 알고리즘 (0) | 2021.06.30 |
[baekjoon] 9012번 괄호 (0) | 2021.06.29 |