본문 바로가기
Computer Science/Algorithm

[백준] 2217 - 로프 (Python)

by 수제햄버거 2021. 3. 30.
728x90
반응형

문제 출처 :

www.acmicpc.net/problem/2217

 

2217번: 로프

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하

www.acmicpc.net

문제 풀이 :

  • 최대무게를 걸어야하고 , "몇 개"의 로프만 골라서 사용할 수 있다.
  • 로프를 여러개 사용하는게 무게가 줄어들어서 좋을까? 라는 생각이 들 수 있지만 주의해야하는 것은 로프마다 견딜 수 있는 무게가 다르다는 점이다.
  • 이런 점을 보았을때 로프를 내림차순으로 정렬 시킨후 모든 로프에 대해서 무게를 늘려가며 최대값을 갱신해주면된다.
  • 제일 무거운 무게를 지탱할 수 있는 로프 순서대로 탐색하니까 뒤로 탐색을 진행해도 앞에 있는 로프들은 무조건 뒤에 탐색되는 로프보다 무거운 무게를 지탱할 수 있다는 점이 좀 까다로웠던 것 같다.
  • 추가로 이 코드는 모든 배열을 다 돌기 때문에 굉장히 느리다. 
rope_num = int(input())
rope_list = []
answer = 0

for _ in range(rope_num):
    rope_list.append(int(input()))
rope_list.sort(reverse = True)

for i in range(rope_num):
    if answer < rope_list[i] * (i + 1):
        answer = rope_list[i] * (i + 1)
print(answer)
반응형