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 에 입력값이 들어가게 했었다
이것도 시간초과 였다..
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python] Baekjoon 백준 1003번 피보나치 함수 (0) | 2021.09.11 |
---|---|
[Python] Baekjoon 백준 10828번 스택 (0) | 2021.09.11 |
[Python] Baekjoon 백준 10814번 나이순 정렬 (0) | 2021.09.06 |
[Python] Baekjoon 백준 1181번 단어 정렬 (0) | 2021.09.06 |
[Python] Baekjoon 백준 11651번 좌표 정렬하기 2 (0) | 2021.09.06 |
reply