View

[Python] Baekjoon 백준 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을 공백 한 칸으로 구분해서 출력한다.

제한

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

 

 

n = int(input())
num = list(map(int, input().split()))
tmp = {v:i for i, v in enumerate(sorted(set(num)))}
[print(tmp[i], end=" ") for i in num]

 

먼저 set() 으로 중복 없애주고, sorted() 로 정렬하고, enumerate() 로 index 값과 value 값을 for() 문 으로 뽑는데

tmp 에 저장할때 index 와 value 의 위치를 바꿔서 저장했다

 

그럼 쉽게 for() 문으로 하나씩 불러와 tmp[i] 하면 value 값이 출력 된다

 

 

추가

 

시간초과 1

tmp = sorted(set(num))
[print(tmp.index(i), end=' ') for i in num]

처음엔 tmp에 저장할때 set(), sorted() 로 중복제거와 정렬만 해서

for() 문으로 tmp.index[i] 로 했었다

시간초과 였다..

 

 

시간초과 2

tmp = dict(enumerate(sorted(set(num))))

for i in num:
    for k, v in tmp.items():
        if i == v:
            print(k, end=" ")

두번째에는 tmp에 저장할때 set(), sorted(), enumerate() 만 해서

key 값이 0 1 2 3 4 식으로 올라가고 value 에 입력값이 들어가게 했었다

이것도 시간초과 였다..

 

728x90
반응형
Share Link
reply