CS기초/코딩테스트
LeetCode 1710 (Easy) Maximum Units on a Truck
오늘의 나1
2021. 3. 3. 21:30
출처: leetcode.com/problems/maximum-units-on-a-truck/
Maximum Units on a Truck - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제
한글 번역은 아래 더보기를 클릭해주세요.
더보기
한 대의 트럭에 정해진 갯수의 박스만 실을 수 있다. 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]로 정렬하고, 내림차순으로 정렬