Algorithm/Greedy

[백준 2217번] 로프

킹우현 2023. 2. 9. 11:30

n = int(input())

solution = 0

weight_list = []

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

weight_list.sort()
list_len = len(weight_list)

for i in range(list_len):
  temp = (list_len-i)*weight_list[i]
  if temp > solution:
    solution = temp

print(solution)

이번 문제는 로프의 개수를 임의로 정하여 로프가 버틸 수 있는 최대 중량을 구하는 문제이다.

 

이 문제의 핵심은 로프들을 사용하여 각 로프가 w/k 만큼의 중량이 걸리게 된다면, 아무리 평균이 높더라도 결국 (각 로프 중량의 최소 값 * 나머지 로프의 개수) 만큼의 무게밖에 들지 못한다는 것이다. 

 

따라서 먼저 로프가 버틸 수 있는 중량을 오름차순으로 정렬한 뒤, 각 로프의 최소 값과 남은 로프의 개수를 곱하여 가장 최대가 되는 중량을 구하였다.

 

중량이 가장 적은 로프부터 순차적으로 계산한다는 점에서 Greedy 적인 접근이 필요했던 문제였다 :)

'Algorithm > Greedy' 카테고리의 다른 글

[백준 13305번] 주유소  (0) 2023.02.24
[백준 3109번] 빵집  (0) 2023.02.09
[백준 5585번] 거스름돈  (0) 2023.02.08
[백준 1541번] 잃어버린 괄호  (0) 2023.02.08
[백준 1026번] 보물  (0) 2023.02.07