연습장/백준(BOJ) 문제풀이
[백준 2217] 로프 with Node.js
Tesseractjh
2021. 4. 13. 00:11
문제 링크
2217번: 로프
N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하
www.acmicpc.net
풀이
let [n, ...ropes] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");
ropes = ropes.map(i => +i);
ropes.sort((a, b) => a-b);
let min = ropes[0]*n;
for (let i=1; i<n; i++) {
weight = ropes[i]*(n-i);
if (min < weight) min = weight;
}
console.log(min);
사용된 로프 중에 단 한 개라도 중량을 견딜 수 없어서는 안 되므로, 로프들을 사용하여 들어올릴 수 있는 물체의 최대 중량은 (버틸 수 있는 최대 중량이 가장 낮은 로프) X (로프의 개수)와 같다.
로프들을 오름차순으로 정렬한 뒤, 모든 로프를 사용하였을 때 들어올릴 수 있는 최대 중량으로 min을 초기화한다. 그리고 가장 버틸 수 있는 최대 중량이 낮은 로프부터 하나씩 배제하면서 최대 중량을 구하고, 그 값이 min보다 작을 때마다 min을 갱신한다.