[백준] 2217번 - 로프 Python

Tuna·2022년 4월 8일
0

Greedy

목록 보기
5/22

문제


N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.

하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.

각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.

입력


첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 자연수이다.

출력


첫째 줄에 답을 출력한다.

예제 입력 1


2
10
15

예제 출력 1


20

풀이


Python

import sys
input = sys.stdin.readline

n = int(input().rstrip())

ropes = []

for i in range(n):
    rope = int(input().rstrip())
    ropes.append(rope)

ropes.sort(reverse=True)

result = 0
for i in range(n):
    max_w = ropes[i] * (i+1)
    if max_w > result:
        result = max_w

print(result)

정리


  • 로프가 버틸 수 있는 최대 중량을 담은 배열을 내림차순으로 정렬해준다.
  • 정렬된 배열을 돌면서 ropes[i]*(i+1)의 값이 현재 결과보다 크면 값을 바꿔준다.
profile
BE 개발자가 되기 위해 노력하는 사람

0개의 댓글