1. 문제
N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.
하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.
각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 단, 각각의 로프는 한 개씩만 존재한다.
2. 입력
첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 정수이다.
3. 출력
첫째 줄에 답을 출력한다.
4. 풀이
N = int(input())
rope = []
value = []
for i in range(N):
rope.append(int(input()))
rope.sort(reverse=True) #1
for num in range(N):
value.append(rope[num]*(num+1)) #2
print(max(value))
이 문제는 N번째로 큰 수를 N번 곱해주면 되는 문제이다.
즉, 10과 15에서 10과 15의 무게를 버틸 수 있는 2개의 rope는 10이 최대로 버틸수 있는 무게이다. 그래서, rope가 2개이기 때문에 20의 무게가 최대 무게가 된다.
예제를 보면 N=2 이고, 입력값은 10과 15이다.
Rope에 입력을 받았을 때, Rope = [10, 15]가 들어간다.
이 Rope라는 리스트를 내림차순으로 정렬하면, Rope = [15, 10]이 된다.
첫 번째로, 정렬된 Rope 리스트에서 첫 번째 값인 15 rope는 15만 버틸 수 있고, 10 rope에서는 15를 못버티기 때문에 15가 최대 중량이다.
두 번째로, 정렬된 Rope 리스트에서 두 번째 값인 10 rope는 10을 버틸 수 있고, 15 rope에서도 10을 버틸 수 있어서 최대 중량은 20이다.
위의 규칙에서 1번째 값은 1번만 버틸 수 있고, 2번째 값은 1번과 2번이 버틸 수 있기 때문에
아래의 식이 세워진다.
rope[N] * N번째 자리
#1 : 최대값을 구해야 하기 때문에, 내림차순으로 정렬한다.
#2 : 위의 식을 나타낸 것이다.
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 1120번 문자열 파이썬(Python) (0) | 2020.01.14 |
---|---|
[백준 알고리즘] 백준 1541번 잃어버린 괄호 파이썬(Python) (0) | 2020.01.12 |
[백준 알고리즘] 백준 2875번 대회 or 인턴 파이썬(Python) (0) | 2020.01.10 |
[백준 알고리즘] 백준 10610번 30 파이썬(Python) (0) | 2020.01.10 |
[백준 알고리즘] 백준 5585번 거스름돈 파이썬(Python) (0) | 2020.01.05 |
[백준 알고리즘] 백준 1931번 회의실배정 파이썬(Python) (0) | 2020.01.05 |
[백준 알고리즘] 백준 11047번 동전 0(Python) (0) | 2020.01.05 |
[백준 알고리즘] 백준 11399번 ATM 파이썬(Python) (0) | 2020.01.03 |
최근댓글