알고리즘/코딩 테스트

[Leetcode] Two City Scheduling

gooooooood 2020. 6. 3. 21:34
반응형

solution for Two City Scheduling

 

 

Problem)

 

 

Solution)

문제에서 각 cost간의 차이 값을 구했을 때, 차이 값이 작으면 A 도시로 차이값이 크면 B 도시로 가는 것이 비용상 더 효율적이다.

즉 문제에서 제공한 예제에 적용해서 4명의 각 비용의 차이 값을 계산하면 [-10, -170, 350, 10]이 되고 이를 오름차순으로 정렬하면 [-170, -10, 10, 350]이 된다. 여기서 우리는 정렬된 리스트를 기준으로 좌측에서 A로 우측에서 B로 한명씩 보내게되면 최소 비용으로 모든 사람들을 A, B 도시로 반반씩 보낼 수 있게 된다.

 

특별한 알고리즘에 대한 지식보다는 문제에 대한 이해와 해석 능력이 필요한 문제인 것 같다.

class Solution:
    def twoCitySchedCost(self, costs: List[List[int]]) -> int:
        N = len(costs)
        diff = [c[0] - c[1] for c in costs]
        indices =  sorted(range(0,N), key=lambda k:diff[k])
        result = 0
        
        for i in range(int(N/2)):
            result += costs[indices[i]][0]
            result += costs[indices[N-i-1]][1]
        return result

 

좀 더 파이썬 다운 코드...

class Solution:
    def twoCitySchedCost(self, costs: List[List[int]]) -> int:
        costs.sort(key = lambda x: x[0]-x[1])
        return sum(i[0] for i in costs[:len(costs)//2]) + sum(j[1] for j in costs[len(costs)//2:])
반응형

'알고리즘 > 코딩 테스트' 카테고리의 다른 글

[Leetcode] Reverse String  (0) 2020.08.19
[Leetcode] Valid Palindrome  (0) 2020.08.18
[Leetcode] Container With Most Water  (0) 2020.06.04
[Leetcode] Invert Binary Tree  (0) 2020.06.02
그래프 탐색 알고리즘 [DFS, BFS]  (0) 2019.02.27