문제📖
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F063021a5-1770-47ac-b995-b22b8e72d0ba%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.13.30.png)
풀이🙏
- 첫째 줄에 N이 주어진다.
- 둘째 줄에는 공백 한 칸으로 구분된 X..... 가 주어진다.
- 수직선 위에 N개의 좌표 X.... 들을 좌표에 좌표 압축을 적용하라.
- 첫째 줄에 X ..... 를 공백 한 칸으로 구분해서 출력하라.
-> 처음에 제너레이터 함수형 프로그래밍
으로 구하였지만 시간초과로인해 실패했다.
-> 두번째 시도에서 list indexing
을했지만 시간초과로인해 실패했다.
-> dict indexing
으로 기존 시간복잡도
O(n)
-> O(1)
로 성공하였다.
코드💻
시간초과 코드1
import sys
def compression(N):
x_list = list(map(int,input().split()))
result = [sum(num < i for num in x_list) for i in x_list]
return ' '.join(map(str, result))
N = int(input())
print(compression(N))
시간초과 코드2
import sys
def compression(N):
x_list = list(map(int,input().split()))
sort_list = sorted(x_list)
result = [sort_list.index(i) for i in x_list]
return ' '.join(map(str, result))
N = int(input())
print(compression(N))
성공 코드
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
arr2 = sorted(list(set(arr)))
dic = {arr2[i] : i for i in range(len(arr2))}
for i in arr:
print(dic[i], end = ' ')
결과😎
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F62353954-d0d4-4dd6-a27a-2d0cbc14c57b%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.12.58.png)
출처 && 깃허브📝
https://www.acmicpc.net/problem/18870
github