2217(로프)-그리디(python)

지환·2023년 9월 30일
0

백준(python)

목록 보기
53/67
post-thumbnail

출처 | https://www.acmicpc.net/problem/2217

코드

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

for i in range(n):
    rf.append(int(input()))

rf.sort()
answer = []

for j in rf: #로프을 순회하면서 값을 계산한다.
    answer.append(j*n)
    n -= 1
print(max(answer))

아이디어

이 문제의 핵심 아이디어는 가장 낮은 중량을 들 수 있는 로프를 사용하는 것이 가장 효율적이며, 그 중량이 가장 낮은 로프가 물체를 들어 올릴 수 있는 중량을 제한한다

따라서 모든 로프 중량을 정렬하고, 가장 낮은 중량을 들 수 있는 로프를 선택하여 최대 중량을 계산하면 된다.

이 문제를 풀 때, 로프 중량을 정렬한 후, 각 로프 중량과 사용하는 로프의 수를 곱하고, 그 중에서 최댓값을 찾으면 최대 중량을 구할 수 있다 백준 2217번 문제의 핵심 아이디어다.

  1. n -= 1: 로프의 가능한 최대 무게를 계산한 후, 다음 반복에서 더 이상 고려하지 않을 로프 한 개를 줄이기 위해 n을 감소시킨다.
  1. answers.append(j * n): 이 줄은 현재 로프 무게 x를 로프를 고려할 남은 개수 n과 곱하여 가능한 최대 무게를 계산한. 이것은 동일한 무게의 여러 로프를 사용하는 것을 고려하고 있음을 나타낸다.
profile
아는만큼보인다.

0개의 댓글