2217번: 로프 (acmicpc.net)

##


##
import sys
input = sys.stdin.read
l = list(map(int,map(lambda x:x.replace('\x1a',''),input().splitlines())))

N = l[0]
l = l[1:]
l.sort(reverse=True)

if N==1:
    print(l[0])
else:
    can = [l[0]]
    use = [l[0]]
    for i in range(1,N):
        use.append(l[i])
        can_w = use[-1] * len(use)
        can.append(can_w)
    print(max(can))
모든 경우를 다 구해서 그중 최대값을 출력하도록 했다.
처음에는 값이 줄어드는 순간에 break를 걸고 can[-1]을 정답이라고 생각했는데 아니었다.

반례, 결과가 5가 나오게 된다.