티스토리 뷰

https://www.acmicpc.net/problem/2217

 

2217번: 로프

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

www.acmicpc.net

 

1. 문제

 

 

 

2. 정답 코드

n = int(input())
ropes = []
for _ in range(n) :
    ropes.append(int(input()))

ropes.sort() # 오름차순 정렬

# each_max는 각 로프를 사용했을 때 들어올릴 수 있는 중량 합을 담는 리스트
each_max = [x * (len(ropes) - i) for i, x in enumerate(ropes) ]

answer = max(each_max)
print(answer)
  • 최종 무게 = 가장 적은 중량을 드는 로프가 들 수 있는 중량 * 병렬 연결된 로프 개수
  • each_max 리스트는 i번째 중량이 가장 작은 중량일 때, 병렬 연결된 로프들끼리 들 수 있는 최종 무게를 담는다.
    • ropes == [4, 5, 6, 7]일 때, eaxh_max == [4*4, 5*3, 6*2, 7*1] == [16, 15,12, 7]
    • 중량 4는 4개의 로프가 들어올릴 수 있으므로 each_max[0] == 16
    • 중량 5는 3개의 로프가 들어올릴 수 있으므로 each_max[1] == 15
  • each_max 리스트는 Pythonic한 방법인 List Comprehension을 사용하였다.
728x90