관리 메뉴

NineTwo meet you

[백준/파이썬] 2217 로프 본문

프로그래밍 문제/백준

[백준/파이썬] 2217 로프

NineTwo 2021. 2. 24. 19:49
반응형

2217 로프 사진 클릭시 문제로 이동


문제

N(1 ≤ N ≤ 100,000) 개의 로프가 있다.

이 로프를 이용하여 이런저런 물체를 들어 올릴 수 있다.

각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.

하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다.

k개의 로프를 사용하여 중량이 w인 물체를 들어 올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.

각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어 올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오.

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

입력

첫째 줄에 정수 N이 주어진다.

다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다.

이 값은 10,000을 넘지 않는 자연수이다.

출력

첫째 줄에 답을 출력한다.

예제 입력 1

2
10
15

예제 출력 1

20

설명

해당 문제는 그리디문제다.

이 문제를 해결하기 위해 입력받은 로프를 오름차순 순서로 정렬했다.

만약 10 20 30으로 로프가 주어졌다고 하자.

모든 로프를 사용하지 않고도 k개의 로프를 사용하여 중량이 w인 물체를 들어 올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 됩니다.

 

10부터 이후의 로프에서 모두 10을 모두 사용했다고 한다면 전체 30의 무게를 들 수 있습니다.

다음으로 20부터 이후의 로프에서 모두 20씩 든다면 사용한다면 전체 40의 무게를 들 수 있습니다.

이런 식으로 정렬된 로프를 순차적으로 탐색하며 해당 인덱스를 가장 작은 무게라고 쳤을 때 들 수 있는 최대 무게를 구해 전체 정답을 구할 수 있습니다. 

 

코드

반응형
Comments