BOJ - 2217

주의·2024년 1월 16일
0

boj

목록 보기
81/214

백준 문제 링크
로프

❓접근법

  1. 만약 최대 중량이 15, 20, 21 이렇게 3가지가 있다고 하자.
    <예제 1> 처럼 가능한 로프가 2개 있을 때,
  • 로프 2개를 사용하여 최대 중량 15를 든다면, 15/2 = 7.5 이므로
    로프 A(10), 로프 B(15) 둘 다 7.5 이상 들 수 있으므로 가능하다.
    현재 가능한 최대 중량은 10이다.
  • 로프 2개를 사용하여 최대 중량 20 든다면, 20/2 = 10 이므로
    로프 A(10), 로프 B(15) 둘 다 10 이상 들 수 있으므로 가능하다.
    여기서 최대 중량은 20으로 바뀐다.
  • 로프 2개를 사용하여 최대 중량 25 든다면, 21/2 = 10.5 이므로
    로프 A(10), 로프 B(15), 로프 B만 10.5 이상 들 수 있으므로 불가능하다.
  1. 따라서 로프를 1 ~ 2개까지 사용했을 때 가능한 최대 중량의 리스트는
    [10, 15, 15, 20] 으로 나타낼 수 있고, 여기서 가장 큰 값은 20이다.
  2. 이를 구하기 위해서 로프를 내림차순 정렬한다.
  3. 만약 로프 = [ 15, 10, 5 ] 이렇게 있을 때,
    1개만 사용했을 때 가능한 최대 중량은 15 x 1
    2개 사용했을 때 가능한 최대 중량은 10 x 2
    3개 사용했을 때 가능한 최대 중량은 5 x 3 으로 나타낼 수 있다.
    따라서 이 예제에서는 가능한 최대 중량이 20 으로 나온다.
  4. 위 예시처럼 중량을 넣을 리스트 w에 중량 * (i+1)을 차례대로 넣어준 후
    최댓값을 출력하면 끝!

👌🏻코드

N = int(input())
data = []

for _ in range(N):
    data.append(int(input()))
    
data.sort(reverse = True)

w = []

for i in range(N):
    w.append(data[i] * (i+1))
print(max(w))

0개의 댓글