[ 백준 ] 2217 로프 [ js ]

Ann·2022년 9월 20일
0

Algorithm

목록 보기
27/53

2217 로프

문제

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.
하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.
각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.

입력

첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 자연수이다.

출력

첫째 줄에 답을 출력한다.

풀이

// let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let input = [2, 10, 15];

let N = parseInt(input[0]);
let arr = [];
for(let i=1; i<=N; i++){
    arr.push(parseInt(input[i]));
}
arr.sort((a,b)=>a-b);

let answer = [];

for(let i=0; i<N; i++){
    let max = arr[i]*(N-i);
    answer.push(max);
}
answer.sort((a,b)=>b-a);
console.log(answer[0])

(여러 로프의 최대중량) / (사용된 로프의 개수) = (사용된 로프 중 최대중량이 작은 로프) 이므로
각각의 로프를 중량이 작은 순서대로 정렬한 배열을 만들고,
max값을 비교하기 위해서
가장 작은 로프까지 사용할때는 로프 개수가 N, 그 다음은 N-1이 되기 때문에
곱한 값을 배열에 push하고 큰순서대로 sort하여 첫번째를 출력하는 방식으로 풀이하였다.

profile
안녕하세요

0개의 댓글