문제링크 : 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))
'알고리즘 공부 > 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 |