본문으로 바로가기

[백준 알고리즘]2217 번 (Python)

category 알고리즘 2020. 11. 17. 10:11

문제출처

www.acmicpc.net/problem/2217

 

2217번: 로프

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

www.acmicpc.net

1. 여러개의 로프로 최대의 중량을 들어야 하고 로프들이 중량을 견딜 수 있어야한다 

    - >중량을 견딜 수 있는 무게가 가장 적은 로프*사용한 로프의 갯수가 로프들이 들 수 있는 최대의 중량이 된다.

첫번 째 실수 : 예외를 생각하지 않고 그대로 중량을 견딜 수 있는 무게가 가장 적은 로프*사용한 로프의 갯수를 출력했다.  "모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다." 라는 문장을 간과했다.

예외 : 로프가 10,20,80으로 주어진다면 최대 들 수 있는 무게는 80이 되므로 위에서 설정한 가정이 맞지 않는다.

2. 배열을 올림차순으로 정렬한다.

3. 로프가 들 수 있는 최대 중량을 임의로 무게가 가장적은 로프*N으로 설정한다.

4. 배열을 1번 째 인덱스부터 순회하면서 임의로 설정했던 최대 중량값과 인덱스번 째 로프부터 N-1번째 

로프까지 사용했을 때의 최댓 값을 비교한다.

5. 임의로 설정한 최대 중량과 비교해 더 큰 값을 최대중량으로 설정해준다.

6. 최종적으로 나온 최대중량을 출력한다. 

 

N = int(input())
K = []
for i in range(N):
    K.append(int(input()))
K.sort()
max = K[0] * N
for i in range(1,N):
    if K[i] * (N -i) > max:
        max = K[i] * (N -i)
print(max)