문제링크 : https://www.acmicpc.net/problem/2217

 

♣ 문제정리

k 개의 로프를 병렬로 연결

각 로프에는 모두 고르개 w/k 만큼의 중량이 걸린다

로프를 이용하여 들어올릴 수 있는 물체의 최대 중량(w)을 구하라

모든 로프를 사용할 필요는 없다 => 사용하는 로프가 1개, 2개, 3개 ,,,, k개

 

입력: 각 로프가 버틸 수 있는 최대 중량

출력: 로프를 이용하여 들어올릴 수 있는 물체의 최대 중량

 

♣ 코드 작성 전 생각할 거리

만약 모든 로프를 사용한다면 물체의 최대 중량은 

=> (로프가 버틸 수 있는 최대 중량 중 가장 최소 값) * k개 일 것이다.

 

하지만, 

모든 로프를 사용할 필요는 없기 때문에 케이스마다 사용하는 로프의 개수를 1개, 2개, 3개 ,,,, k개로 나눈다면,

(로프의 개수) * (해당하는 로프들 중 가장 최소 값) 으로 계산해서 가장 최대인 값이 출력돼야 한다!

 

그러려면  입력되는 로프들을 정렬을 해야한다. 최대중량이 제일 큰 로프 순으로 꺼내면서 순서대로 병렬을 해야 하기 때문이다.

 

♣ 코드 작성

k = int(input())

ropes = []
for i in range(k):
    ropes.append(int(input()))

ropes.sort(reverse=True) # 내림차순 정렬

weights = []
for i in range(k):
    w = (i+1) * ropes[i]
    weights.append(w)

print(max(weights))

참고: https://pangsblog.tistory.com/21

https://jitolit.tistory.com/134

'알고리즘 공부 > coding test' 카테고리의 다른 글

백준 20115 [에너지 드링크]  (0) 2022.05.20
백준 11399 [ATM]  (0) 2022.05.18
백준 2358 [평행선]  (0) 2022.02.08
백준 2609 [최대공약수와 최소공배수]  (0) 2021.02.04
백준 11022 [A+B-8]  (0) 2021.02.04

+ Recent posts