March 12, 2023
https://www.acmicpc.net/problem/2217
굵은 로프를 먼저 오게 정렬해서 순회하면 되는데, i번째 로프까지 사용할 때의 최대로 들어올릴 수 있는 중량은 다음 값 중 하나이다.
// 입력 처리
const INPUT_NAME = 'i1.txt';
const filePath = process.platform === 'linux' ? '/dev/stdin' : `./${__dirname.split('\\').pop()}/${INPUT_NAME}`;
const input = require('fs').readFileSync(filePath).toString().trim().split('\n').map(item => item.trim());
const n = Number(input[0]);
const lopes = input.map((v, i) => i > 0 ? Number(v) : 0);
lopes.shift();
lopes.sort((a, b) => b - a);
// 문제
function solution() {
let result = 0;
// 가장 굵은 로프부터 반복한다.
lopes.forEach((w, i) => {
const parallel = w * (i + 1); // i개의 로프를 사용했을 때 최대로 받을 수 있는 중량
result = Math.max(result, w, parallel); // 이전의 결과 값, 현재 로프만 사용했을 경우, 현재 로프까지 병렬로 사용했을 경우 중 가장 큰 중량 기록
});
console.log(result);
}
// 실행
solution();