0%

BOJ 2217

Input

첫째 줄에 정수 N이 주어진다.

다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 자연수이다.

1
2
3
4
5
import sys
input = sys.stdin.readline

n = int(input())
s = [int(input().rstrip()) for _ in range(n)]

Greedy

처음에는 문제 이해를 잘못 했었음. 여러 물체를 들 수 있는 줄 알았지.. 근데 생각해보면 이건 그냥 sum을 구하는 문제다 ㅋㅋ 암튼

  • 물체는 최대 중량으로 한 개 들어야 함
  • 여러 로프로 나누어 들어도 되고, 모든 로프를 쓸 필요는 없음

일단 sorted 부터 써야 한다. 가장 작은 중량치를 가진 로프를 기준으로 할 건지, 큰 중량치를 기준으로 할 건지부터 정해야 하기 때문.

1
2
s = sorted(s)
ret = s[-1]
  • 작은 중량치가 기준일 경우: n배
  • 큰 중량치가 기준일 경우: 해당 중량 = 최대
1
2
for i in range(n-1):
ret = max(s[i] * (n - i), ret)

이걸 처음엔 중첩 for문으로 작성했었다. 근데 생각해보면 쓸데없는 계산이 들어갔었음. 위와 같이 줄일 수 있다.