[백준 2217] 로프

문제

https://www.acmicpc.net/problem/2217

아이디어

굵은 로프를 먼저 오게 정렬해서 순회하면 되는데, i번째 로프까지 사용할 때의 최대로 들어올릴 수 있는 중량은 다음 값 중 하나이다.

  1. 이전에 계산했던 최대 중량
  2. 현재 로프만 사용해서 들어올릴 수 있는 최대 중량
  3. 이전의 더 굵은 로프들과 현재 로프까지 묶어서 사용했을 때의 최대 중량

소스코드

// 입력 처리
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();

Written by@bbearcookie
Frontend 개발자가 되려고 하는 컴퓨터공학과 학생입니다. React 와 Express 같은 JS, TS 기반의 기술에 관심이 있습니다.