BOJ 2217 로프

LONGNEW·2020년 12월 29일
0

BOJ

목록 보기
13/333

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

시간 2초, 메모리 192MB
input :

  • N (1 <= N <= 100,000)

  • 최대 중량 KG (1 <= KG <= 10,000)
    output :

  • 들어올릴 수 있는 최대 중량 구하기.
    조건 :

  • K 개의 로프로 중량 W 인 물체 들 때 -> 로프에 W / K 만큼의 중량이 걸림.

  • 모든 로프 사용 X, 몇 개의 로프 고르기 가능.


여러개의 로프로 물체를 들면.
각 로프 마다 W / K 중량이 걸리고 그 로프가 K개 존재함.

만약 현재가 N 이라면, N - 1번째의 최댓값을 가지고 있는 total.
시작부터 N - 1번째 까지의 합을 가지고 있는 prev.
로프의 개수를 세아리는 cnt.
현재 로프의 최대 중량을 나타내는 cur.

모두 동일한 하중을 받는다는 의미.
각 로프의 최대 중량을 넘을수 없다와 동일.

내림차순 정렬을 통해 가장 큰 것 부터 생각을 한다.
여러개의 로프를 쓸 경우엔
가장 작은 중량 * 로프의 개수 이것을 내림차순 정렬을 했을 때 구하기 쉽다.

2개의 로프를 쓸 때 가장 큰 경우.
3개의 로프를 쓸 때 가장 큰 경우. 를 생각해보면 내림차순 정렬이 필요하다.

import sys

N = int(sys.stdin.readline())
KG = [0] * (N)

for i in range(N):
    data = int(sys.stdin.readline())
    KG[i] = data

KG.sort(reverse=True)
total = 0
for idx in range(len(KG)):
    num = idx + 1
    total = max(total, KG[idx] * num)

print(total)

시작할때 동일한 하중이란 것을 생각하지 못해서 시간을 허비함.

0개의 댓글