간단한 그리디 문제이다.
로프들을 하나씩 추가해 나가면서 들 수 있는 중량의 값을 갱신해나가면 되는데 w 중량의 물체를 k개의 로프로 들어올릴때 각 로프가 감당하는 무게는 w/k라는 점을 생각해서 코드를 작성하면 된다.
import sys
input = sys.stdin.readline
n = int(input())
ropes = []
for _ in range(n):
ropes.append(int(input()))
ropes.sort(reverse=True)
weight = 0
tot = 0
for rope in ropes:
tot += 1
if weight == 0:
weight = rope
else:
weight += rope
if weight/tot > rope:
weight -= rope
if rope*tot >= weight:
weight = rope*tot
print(weight)