🔥 접근
- 아래 개념에 기반하여 그리디 알고리즘을 활용하였다.
- 로프가 들 수 있는 최대 중량은 "(가장 약한 로프의 하중) × (사용된 로프 수)" 로 결정
- 따라서 하중이 높은 로프부터 순차적으로 선택하면서 가능한 최대 하중을 매번 계산, 그 중 가장 큰 값을 선택하는 것이 최적
- 로프의 최대 하중을 내림차순으로 정렬한다. (무거운 걸 들 수 있는 로프부터 고려해야 함!)
- 반복문 활용
- i + 1개의 로프를 사용했을 때, 가장 약한 로프는 arr[i]
- 이 때 가능한 최대 하중은: arr[i] * (i + 1)
- 계산된 최대 하중을 selectionArr에 push
- selectionArr에서 가장 큰 값을 도출
🧑💻 코드
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
const input = fs
.readFileSync(filePath, 'utf8')
.toString()
.trim()
.split('\n')
.map(Number);
const N = input.shift();
const arr = input.sort((a, b) => b - a);
const selectionArr = [];
for (let i = 0; i < N; i++) {
selectionArr.push(arr[i] * (i + 1));
}
console.log(Math.max(...selectionArr));
🔗 관련 링크