출처: leetcode.com/problems/maximum-units-on-a-truck/
문제
한글 번역은 아래 더보기를 클릭해주세요.
더보기
한 대의 트럭에 정해진 갯수의 박스만 실을 수 있다. boxTypes[i] = [numberOfBoxes(i), numberOfUnitsPerBox(i)]인 이차원 배열 boxTypes이 주어질 때:
- numberOfBoxes(i)는 타입 i의 박스의 갯수이다
- numberOfUnitsPerBox(i)는 타입 i의 박스 한 개에 있는 유닛의 갯수이다
정수 truckSize가 주어지는 데, 이는 트럭에 실을 수 있는 박스의 최대 갯수를 의미한다. 박스의 최대 갯수를 초과하기 전까지 박스를 실을 수 있다.
트럭에 실을 수 있는 유닛의 최대 갯수를 구하여라.
예제 1:
- 입력: boxTypes=[[1, 3], [2, 2], [3, 1]], truckSize=4
- 출력: 8
- 설명:
- 타입 0: 박스 1개, 박스 당 유닛 3개
- 타입 1: 박스 2개, 박스 당 유닛 2개
- 타입 2: 박스 3개, 박스 당 유닛 1개
타입 0 박스 1개, 타입 1 박스 2개, 타입 2 박스 1개를 실을 수 있다.
트럭에 실은 유닛의 갯수는 (1 * 3) + (2 * 2) + (1 * 1) = 8
예제 2:
- 입력: boxTypes=[[5, 10], [2, 5], [4, 7], [3, 9]], truckSize=10
- 출력: 91
풀이
해결방법
상자 한 개에 유닛이 많은 순으로 정렬하여
truckSize를 채우기 전까지 순서대로 상자를 넣는다.
javascript
/**
* @param {number[][]} boxTypes
* @param {number} truckSize
* @return {number}
*/
var maximumUnits = function(boxTypes, truckSize) {
// 상자 한 개에 유닛이 많은 순으로 정렬하여
boxTypes.sort((a, b) => {
return b[1] - a[1];
});
let boxTypeLen = boxTypes.length
let maxUnits = 0;
let i = 0;
// 트럭이 찰 때까지 순서대로 넣는다
while (truckSize > 0 && i < boxTypeLen) {
const boxCount = Math.min(boxTypes[i][0], truckSize)
maxUnits += boxCount * boxTypes[i][1]
truckSize -= boxCount
i += 1
}
return maxUnits
};
python
class Solution:
def takeUnitCount(self, boxType):
return boxType[1]
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
boxTypes.sort(key=self.takeUnitCount, reverse=True)
maxUnits = 0
for boxType in boxTypes:
if truckSize is 0:
break
boxCount = min(boxType[0], truckSize)
maxUnits += (boxCount * boxType[1])
truckSize -= boxCount
return maxUnits
결과
파이선 문법 알게된 것
List.sort로 커스텀 정렬하기
def takeSecond(arr):
return arr[1]
boxTypes = [[1, 3], [2, 2], [3, 1]]
boxTypes.sort(key=takeSecond, reverse=True) # 아이템[1]로 정렬하고, 내림차순으로 정렬
'CS기초 > 코딩테스트' 카테고리의 다른 글
LeetCode 278 (Easy) First Bad Version (0) | 2021.03.11 |
---|---|
LeetCode 392 (Easy) Is Subsequence (0) | 2021.03.03 |
LeetCode 122 (Easy) Best Time to Buy and Sell Stock II (0) | 2021.03.03 |
LeetCode 1217 (Easy) Minimum Cost to Move Chips to The Same Position (0) | 2021.02.24 |
LeetCode 1725 (Easy) Number Of Rectangles That Can Form The Largest Square (0) | 2021.02.24 |