
728x90
처음 문제를 봤을때 바로 이해되는 않았던 문제다.
그리고 처음 제출땐 매우 중요한 부분을 간과하고 제출해 실패의 고배를 마셨다.
바로 "모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다"
이부분이다.
처음에 이부분을 간과해 그냥 로프 최대중량을 리스트에 넣은다음 가장 작은값(min)에 n을 곱해 답을 구했다.
하지만 모든 로프를 사용하지 않아도 되므로 이렇게 풀어서는 안된다.
이 부분의 해결법은 모든 리스트들을 오름차순으로 정렬하고 가장 작은 값부터 차례대로 모든 원소에 곱해나가며
하나씩 제거해 그 값들중 가장 큰 값을 출력하는 것이다.
말로 하면 어려우니 코드를 보자.
n = int(input())
array = []
for _ in range(n):
a = int(input())
array.append(a)
array = sorted(array) #입력받은 a 값들을 작은 순서대로 차례대로 배열
max_array = [] #새롭게 비교할 값들을 넣을 리스트 생성
for i in range(n):
b = array[i] * (n-i) #리스트의 첫번째 값부터 순서대로 전체 원소에서 하나씩 빼가며 곱한다.
max_array.append(b) # 위에서 말한 값들을 max_array리스트에 넣는다
print(max(max_array)) # 그중 최대값이 정답
예를 들어 n에 4, 6, 8, 10 이 들어간다면 max_array에 16, 18, 16, 10이 들어가므로 답은 18
즉 18이 이 로프들로 들 수 있는 최대 무게이다.
'Algorithm' 카테고리의 다른 글
백준 알고리즘 파이썬(Python) 1343번 폴리오미노 (0) | 2021.04.16 |
---|---|
백준 알고리즘 파이썬(Python) 19598번 최소 회의실 개수 (0) | 2021.04.15 |
백준 알고리즘 파이썬(Python) 14916번 거스름돈 (0) | 2021.04.14 |
백준 알고리즘 파이썬(Python) 2141번 우체국 (0) | 2021.04.11 |
백준 알고리즘 파이썬(Python) 1541번 잃어버린 괄호 (0) | 2021.04.11 |