반응형
Notice
Recent Posts
Recent Comments
- Today
- Total
작심삼일
[LeetCode] 1029 | Two City Scheduling | Python 본문
728x90
반응형
문제 링크: https://leetcode.com/problems/two-city-scheduling/
문제
A company is planning to interview 2n people. Given the array costs where costs[i] = [aCosti, bCosti], the cost of flying the ith person to city a is aCosti, and the cost of flying the ith person to city b is bCosti.
Return the minimum cost to fly every person to a city such that exactly n people arrive in each city.
조건
- 2 * n == costs.length
- 2 <= costs.length <= 100
- costs.length is even.
- 1 <= aCosti, bCosti <= 1000
내 풀이
costs안의 원소를 [a, b]로 표현한다면, a<b인 것들은 모두 A로, 나머지는 모두 B로 보내놓는다.
A와 B 중 더 많은 원소를 포함한 것을 더 작은 것으로 보내줘야한다. (ex. len(A)=4, len(B)=2일 때, A에서 B로 하나 보내야 함)
어떤 원소를 보내는지는 [a, b]일 때, a와 b의 차가 제일 적은 것부터 보낸다.
그래야 전체 cost가 크게 증가하지 않기 때문이다.
코드
class Solution:
def twoCitySchedCost(self, costs: List[List[int]]) -> int:
A, B = [], []
for cost in costs:
a, b = cost
if a < b:
A.append(cost)
else:
B.append(cost)
A = sorted(A, key=lambda a: a[1]-a[0])
B = sorted(B, key=lambda a: a[0]-a[1])
nA, nB, nC = len(A), len(B), int(len(costs)/2)
if nA > nB:
for n in range(nC-nB):
B.append(A[n])
A = A[nC-nB:]
else:
for n in range(nC-nA):
A.append(B[n])
B = B[nC-nA:]
ans = 0
for n in range(len(A)):
ans += A[n][0]
for n in range(len(B)):
ans += B[n][1]
return ans
728x90
반응형
'스터디 > 코테' 카테고리의 다른 글
[LeetCode] 287 | Find the Duplicate Number | Python (0) | 2022.03.29 |
---|---|
[LeetCode] 81 | Search in Rotated Sorted Array II | Python (0) | 2022.03.28 |
[LeetCode] 881 | Boats to Save People | Python (0) | 2022.03.24 |
[LeetCode] 991 | Broken Calculator | Python (0) | 2022.03.23 |
[LeetCode] 1663 | Smallest String With A Given Numeric Value | Python (0) | 2022.03.22 |
Comments