출처 | https://www.acmicpc.net/problem/2217
n = int(input())
rf = []
for i in range(n):
rf.append(int(input()))
rf.sort()
answer = []
for j in rf: #로프을 순회하면서 값을 계산한다.
answer.append(j*n)
n -= 1
print(max(answer))
이 문제의 핵심 아이디어는 가장 낮은 중량을 들 수 있는 로프를 사용하는 것이 가장 효율적이며, 그 중량이 가장 낮은 로프가 물체를 들어 올릴 수 있는 중량을 제한한다
따라서 모든 로프 중량을 정렬하고, 가장 낮은 중량을 들 수 있는 로프를 선택하여 최대 중량을 계산하면 된다.
이 문제를 풀 때, 로프 중량을 정렬한 후, 각 로프 중량과 사용하는 로프의 수를 곱하고, 그 중에서 최댓값을 찾으면 최대 중량을 구할 수 있다 백준 2217번 문제의 핵심 아이디어다.
n -= 1
: 로프의 가능한 최대 무게를 계산한 후, 다음 반복에서 더 이상 고려하지 않을 로프 한 개를 줄이기 위해 n을 감소시킨다.answers.append(j * n)
: 이 줄은 현재 로프 무게 x를 로프를 고려할 남은 개수 n과 곱하여 가능한 최대 무게를 계산한. 이것은 동일한 무게의 여러 로프를 사용하는 것을 고려하고 있음을 나타낸다.