반응형

www.acmicpc.net/problem/2217

 

2217번: 로프

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

www.acmicpc.net

문제 설명

N개의 로프를 이용해 물체를 들어올린다.

N개의 로프는 주어진 중량만큼까지만 물체를 들어올릴 수 있으며, K개의 로프를 이용하여 W무게의 물체를 들어올린다면, 모든 로프에 똑같이 W / K 만큼의 중량이 걸리게 된다.

입력으로 각 로프들에 대한 정보가 주어지면, 이 로프들을 이용하여 버틸 수 있는 최대 중량을 출력하면 된다.


풀이 과정

A라는 로프가 버틸 수 있는 중량이 최대 A라면 이 로프는 A를 넘어가는 무게는 들 수 없다.

이 때, A 한개를 이용하면 A만큼 들 수 있고 두개를 이용하면 2A만큼 들 수 있다. ( 2A / 2 = A )

주의해야 할 점은, 가장 무거운 무게의 로프가 들 수 있는 중량을 A, 그 다음을 B라고 할 때,

로프 1개를 이용하여 들수 있는 중량의 최댓값은, A가 될 것이고, 로프 2개를 이용하여 들 수 있는 최댓값은 B*2가 된다.

 

즉, 이용할 로프 중 가장 작은 무게의 로프중량 * 개수 가 될 것이다.

 

따라서, 로프의 개수를 늘릴수록 최댓값은 그 로프의 무게*N이 될 것이기 때문에

로프들의 무게를 내림차순으로 정렬하여, 로프의 개수가 늘어갈수록 현재 로프의 수 * 쌓인 로프의 수를 곱해주면 로프들이 들 수 있는 무게의 값들이 정리될 것이다.

n = int(input())
rope = []

for i in range(n):
    rope.append(int(input()))
rope.sort(reverse=True)

for i in range(n):
    rope[i] = rope[i] * (i+1)

print(max(rope))

 

https://github.com/HongEunho

 

HongEunho - Overview

📖 Android, Java, Kotlin, Algorithm. HongEunho has 15 repositories available. Follow their code on GitHub.

github.com

전체 문제 & 코드는 위의 깃에 정리되어 있습니다.

팔로우 & 맞팔은 환영입니다 !

반응형

+ Recent posts