🥞 BE
home

2217_로프

담당자
완료 여부
Solved
요약
날짜
2024/06/03
태그
그리디
난이도
S4
출처
백준

처음 코드

n = int(input()) rope = [int(input()) for _ in range(n)] print(min(rope) * n)
Python
복사
처음에 너무 쉽게 생각했다. 가장 적은 무게를 들 수 있는 로프 * 전체 로프 개수를 하면 최대 무게가 나온다고 생각했으나, 문제의 조건에 “모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.”라는 부분을 간과했다.
→ 각 로프가 들 수 있는 최대 무게 경우의 수를 모두 고려해보고 최대 무게를 결정해야한다.

수정 코드

n = int(input()) rope = [int(input()) for _ in range(n)] rope.sort(reverse=True) weight = [] # 로프별 들 수 있는 최대 무게를 구해야함. for i in range(n): weight.append(rope[i] * (i+1)) # ex) [100*1, 50*2, 30*3, 30*4, 10*5] print(max(weight))
Python
복사

문제 해결 아이디어

가장 적은 무게를 들 수 있는 로프 * 전체 로프 개수 = 최종 무게 라는 공식 자체는 변함이 없으나, 가장 힘이 센 로프 > 가장 약한 로프*전체 무게의 경우를 고려해야한다. 예를 들어, [100, 20, 10]일 경우, 위의 공식대로라면 30이 최대 무게이지만, 사실은 100하나로도 100의 무게를 충분히 들 수 있다. 때문에 이를 내림차순 정렬해서 병렬 로프 개수를 곱해주며, 가장 큰 무게를 들 수 있는 로프가 무엇인지를 생각해야한다.