티스토리 뷰
Worker의 2차원 좌표를 담은 workers와 Bike의 2차원 좌표를 담은 bikes 리스트가 각각 주어지고, worker와 bike가 가장 가깝게 쌍을 지어주는 문제다. 문제를 복잡하게 생각해 Priority Queue(우선순위 큐)를 사용하기 위해 heapq를 사용했으나 오히려 사이즈가 큰 input은 TLE(Time Limit Exeeded)가 발생한다. 오히려 간단하게 거리를 계산한 모든 쌍을 리스트에 담고 리스트를 정렬해 거리가 짧은 순서부터 반환할 리스트에 담으면 쉽게 해결된다.
아래는 앞서 말한 모든 쌍을 리스트에 담고 정렬한 솔루션인데 시간복잡도 측면에선 중복 체크를 리스트(bl) 대신 세트를 사용하면 훨씬 개선이 가능하다.
참고로 가장 높은 vote를 받은 솔루션은 Bucket Sort를 사용했다.
class Solution:
def assignBikes(self, workers: List[List[int]], bikes: List[List[int]]) -> List[int]:
ret = [-1 for i in range(len(workers))]
ds = []
for i, w in enumerate(workers):
for j, b in enumerate(bikes):
d = abs(w[0] - b[0]) + abs(w[1] - b[1])
ds.append([d, i, j])
ds.sort()
bl = []
for i, item in enumerate(ds):
if ret[item[1]] == -1 and item[2] not in bl:
ret[item[1]] = item[2]
bl.append(item[2])
return ret
반응형
'기술(Tech, IT) > 리트코드(LeetCode)' 카테고리의 다른 글
[LeetCode] 70. Climbing Stairs (0) | 2023.07.11 |
---|---|
[LeetCode] 1150. Check If a Number Is Majority Element in a Sorted Array (0) | 2023.07.10 |
[LeetCode] 616. Add Bold Tag in String (0) | 2023.05.07 |
[LeetCode] 582. Kill Process (0) | 2023.05.06 |
[LeetCode] 604. Design Compressed String Iterator (0) | 2023.05.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- leetcode
- Hash Map
- 티스토리챌린지
- 리트코드
- 이코노미스트
- I2C
- 오블완
- 머신 러닝
- 투 포인터
- java
- vertex shader
- 딕셔너리
- Computer Graphics
- Python
- DICTIONARY
- ml
- Android
- The Economist Espresso
- socket programming
- defaultdict
- 안드로이드
- tf-idf
- join
- 파이썬
- min heap
- The Economist
- machine learning
- 이코노미스트 에스프레소
- C++
- 소켓 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형