[BOJ] 2217번 - 로프

🔥 접근

  1. 아래 개념에 기반하여 그리디 알고리즘을 활용하였다.
    • 로프가 들 수 있는 최대 중량은 "(가장 약한 로프의 하중) × (사용된 로프 수)" 로 결정
    • 따라서 하중이 높은 로프부터 순차적으로 선택하면서 가능한 최대 하중을 매번 계산, 그 중 가장 큰 값을 선택하는 것이 최적
  2. 로프의 최대 하중을 내림차순으로 정렬한다. (무거운 걸 들 수 있는 로프부터 고려해야 함!)
  3. 반복문 활용
    • i + 1개의 로프를 사용했을 때, 가장 약한 로프는 arr[i]
    • 이 때 가능한 최대 하중은: arr[i] * (i + 1)
    • 계산된 최대 하중을 selectionArr에 push
  4. 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));

🔗 관련 링크

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 1026번 - 보물  (0) 2025.04.10
[BOJ] 1931번 - 회의실 배정  (0) 2025.04.10
[BOJ] 11047번 - 동전 0  (0) 2025.04.10
[BOJ] 9466번 - 텀 프로젝트  (0) 2025.04.09
[BOJ] 2206번 - 벽 부수고 이동하기  (0) 2025.04.08