연습장/백준(BOJ) 문제풀이

[백준 2217] 로프 with Node.js

Tesseractjh 2021. 4. 13. 00:11

문제 링크

www.acmicpc.net/problem/2217

 

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을 갱신한다.