Hello World!/Algorithm

백준 2217 로프 - python

헬로월드! 2021. 3. 25. 01:35

2217번: 로프 (acmicpc.net)

 

2217번: 로프

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

www.acmicpc.net

 

문제 유형 ) 그리디, 정렬

 

문제 ) N 개의 로프가 있는데 이걸로 물건을 들어올릴 수 있다. 이 로프의 굵기나 길이가 달라서 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만, 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다.

k 개의 로프를 사용하여 중량이 w인 물체를 들어올린다면 w/k만큼의 중량이 걸리게 된다. 

각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량은?

 

예를 들어 5개의 로프가 있다고 할 때 , 

이때 각 로프는 버틸 수 있는 최대 중량이 주어진다. 

array = [ 27, 23, 15, 11, 3 ] 

이렇게 있다면

- 로프가 1개라면 27 * 1 = 27 

-           2개            23 * 2 = 46

-           3개            15 * 3 = 45

-           4개            11 * 4 = 44

-           5개             3  * 5 = 15

 

-> 로프들을 이용해서 들어올릴 수 있는 물체의 최대 중량을 구해내는 것이기 때문에 답은 46 이다! 

-> 이걸 식으로 나타내면 

for i in range(5):

    result.append(array[i] * (i+1))

-> result 라는 리스트를 만들어서 결과값을 넣어주고 여기서 최댓값을 꺼내면 끝!