728x90


처음 문제를 봤을때 바로 이해되는 않았던 문제다. 

그리고 처음 제출땐 매우 중요한 부분을 간과하고 제출해 실패의 고배를 마셨다.

바로 "모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다"

이부분이다.

처음에 이부분을 간과해 그냥 로프 최대중량을 리스트에 넣은다음 가장 작은값(min)에 n을 곱해 답을 구했다.

하지만 모든 로프를 사용하지 않아도 되므로 이렇게 풀어서는 안된다.

이 부분의 해결법은 모든 리스트들을 오름차순으로 정렬하고 가장 작은 값부터 차례대로 모든 원소에 곱해나가며 

하나씩 제거해 그 값들중 가장 큰 값을 출력하는 것이다.

말로 하면 어려우니 코드를 보자.


n = int(input())

array = []
for _ in range(n):
    a = int(input())
    array.append(a)
    
array = sorted(array) #입력받은 a 값들을 작은 순서대로 차례대로 배열

max_array = [] #새롭게 비교할 값들을 넣을 리스트 생성
for i in range(n):
    b = array[i] * (n-i) #리스트의 첫번째 값부터 순서대로 전체 원소에서 하나씩 빼가며 곱한다. 
    max_array.append(b) # 위에서 말한 값들을 max_array리스트에 넣는다

print(max(max_array)) # 그중 최대값이 정답

예를 들어 n에 4, 6, 8, 10 이 들어간다면 max_array에 16, 18, 16, 10이 들어가므로 답은 18 

즉 18이 이 로프들로 들 수 있는 최대 무게이다.

복사했습니다!