일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- react native typescript navigation
- javascript
- react native typescript navigate
- node.js
- GitHub
- 스탠실 버퍼 시작
- 벡터와 리스트의 차이
- stencil buffer
- react native typescript
- C++
- c++ using
- Expo
- react native
- c++ 정보은닉
- node
- react native mac
- cyworld
- react-native
- unity stencil buffer
- react native accessible
- react native ios 기기 연결
- html
- 스탠실 버퍼 튜토리얼
- 리액트 네이티브 맥
- 싸이월드
- 스탠실 버퍼 사용
- 리액트 네이티브 설치 오류
- react
- react native 타입스크립트
- CSS
- Today
- Total
혀니의 이거저거 뿌시기
백준 18870 좌표 압축 - 정렬 본문
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
N = int(input())
X = list(map(int, input().split()))
lst = list(set(X.copy()))
lst.sort()
x = []
dic = {lst[i]: i for i in range(len(lst))}
for i in range(len(X)):
x.append(str(dic[X[i]]))
print(" ".join(x))
뭔가 걍 인덱싱하는 문제라 간단하겠지~ 했는데 헛짓거리하다 오래걸린 ... . .......
내 생각은 for문을 이중으로 돌리면서 지나왔단 값보다 크면 그값에 +1을 하고 그런식으로 하면 될거라 생각했다.
하지만 그렇게 되면 같은 값인데도 계속 커져서 제대로 순위가 매겨지지 않았다.
처음에는 set으로 우선순위를 ..정해서 해야되나 했는데 그렇게하는게 맞긴 맞았지만 list로 바꾸지 않아서 인덱스 참조를 못했다.
그렇다고 계속 max,min값을 변화시켜? 너무 번거로와서 머리 터졋다.
list를 하나 더 복사하고싶은데 깊은복사가 돼서 sort할수도 없었다.
정답은
1.복사는 list.copy()로
2.set으로 전환시킨 뒤에 list로 전환
3.copy된 새로운 list의 인덱스를 참조하면서 해당하는 값이 있으면 이를 출력!!
이런 간단한 방법으로 이뤄지는데..
잘 되는데 또!! 또! 또간초과가 되는것임! ;;
이유인 즉슨! list.index(값)을 하면 처음부터 쫙 훑기 때문에 O(N)의 시간복잡도를 가져서 느리게 된다는 것이다.
따라서 처음으로 dictionary를 만들어봤다. 만드는 방법은
dic = {list[i] : i for i in range(len(str))}
이런 식으로 { : }하면 됨!
이렇게하면 잘 된다.ㅎ
'알고리즘 공부(C++)' 카테고리의 다른 글
백준 1764 듣보잡 - 차집합 (0) | 2022.09.02 |
---|---|
백준 2609 최소공배수 최대공약수 (0) | 2022.09.02 |
백준 10610 30 그리디 (0) | 2022.08.30 |
백준 2606 바이러스 - DFS 그래프 순회 (0) | 2022.08.30 |
백준 1269 대칭 차집합 (0) | 2022.08.29 |