KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • recursion
  • tree
  • js
  • 다이나믹 프로그래밍
  • Level1
  • string
  • programmers
  • Level 2
  • 백준
  • 정렬
  • 그래프
  • 제코베 JS 100제
  • Level 0
  • 수학
  • 문자열
  • LeetCode
  • Level 1
  • C++
  • codeup
  • C

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun
PS/백준

백준 / 그리디(Greedy) / 2217번 / 로프 / JS

PS/백준

백준 / 그리디(Greedy) / 2217번 / 로프 / JS

2022. 5. 10. 23:21

문제

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.

하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.

각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.

입력

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

출력

첫째 줄에 답을 출력한다.

예제 입력 1 

2
10
15

예제 출력 1 

20

 

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
// const filePath = process.platform === 'linux' ? '/dev/stdin' : 'BOJ/input.txt';
const input = fs.readFileSync(filePath).toString().split('\n');

const N = +input.shift();
const weights = input.map(Number);

function solution(N, weights) {
  let result = 0;
  weights.sort((a, b) => b - a);

  for(let i=0; i<N; i++) {
    result = Math.max(result, weights[i] * (i + 1));
  }
  console.log(result);
}

solution(N, weights);

일단 배열을 내림차순으로 정렬을 해준다.

 

예시로 정렬 후 배열이 [30, 20, 10]이 되었다고 해보자.

내림차순으로 정렬을 하면 최댓값이 앞에 오게 되는데, 어차피 그 이상의 무게는 들어올릴 수 있는 로프가 없다.

 

위의 코드대로 하면 30*1, 20*2, 10*3 중에서 최댓값을 찾는 것이다.

 

위가 의미하는 바는, (무게) * (무게를 들어올릴 수 있는 로프의 갯수) 이다.

저작자표시 (새창열림)

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

백준 / 구현 / 16926번 / 배열 돌리기 1 / JS  (2) 2022.06.24
백준 / 그리디 / 1449번 / 수리공 항승 / JS  (0) 2022.05.15
백준 / 그래프 - 위상 정렬 / 2252번 / 줄 세우기 / JS  (0) 2022.05.10
백준 / 그래프 - 위상 정렬 / 1516번 / 게임 개발 / JS  (0) 2022.05.10
    'PS/백준' 카테고리의 다른 글
    • 백준 / 구현 / 16926번 / 배열 돌리기 1 / JS
    • 백준 / 그리디 / 1449번 / 수리공 항승 / JS
    • 백준 / 그래프 - 위상 정렬 / 2252번 / 줄 세우기 / JS
    • 백준 / 그래프 - 위상 정렬 / 1516번 / 게임 개발 / JS
    KimMinJun
    KimMinJun

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.