문제 링크 : www.acmicpc.net/problem/2217
처음에 나타난 최대 중량을 구하는 방법을 찾는데 시간이 조금 걸렸다. 로프가 버틸 수 있는 최대 중량은 (선택한 로프들의 버틸 수 있는 중량 중 최솟값) x (선택한 로프의 개수)이다. 따라서 예제를 살펴보면 로프가 2개가 있고, 버틸 수 있는 중량이 10, 15이다. 여기서 로프를 모두 사용할 필요는 없으므로 가능한 경우의 수는 2가지이다.
① 버틸 수 있는 중량이 15인 로프만 사용 ==> 버틸 수 있는 중량 = 15 x 1 = 15
② 버틸 수 있는 중량이 10인 로프만 사용 ==> 버틸 수 있는 중량 = 10 x 1 = 10
③ 두 개의 로프를 모두 사용 ==> 버틸 수 있는 중량 = 10 x 2 = 20
따라서 버틸 수 있는 최대 중량은 20이다.
이를 통해 생각한 문제풀이 방법은 다음과 같다.
① 중량들을 내림차순으로 정렬하고, 최대 중량을 첫 번째 원소의 값으로 초기화
② 다음 로프가 추가되었을 때의 중량이 최대 중량보다 크면 최대 중량을 갱신
import sys
N = int(sys.stdin.readline())
ropes = []
for _ in range(N):
rope = int(sys.stdin.readline())
ropes.append(rope)
ropes.sort(reverse=True)
weight = 0
max_weight = ropes[0]
for i, rope in enumerate(ropes):
weight = rope * (i+1)
if weight > max_weight:
max_weight = weight
print(max_weight)
제출 후 다른 분들의 코드를 살펴보았는데 리스트 표현식, max()함수 등을 이용하여 소스코드를 간결하게 작성이 가능했다. 따라서 간결한 버전의 소스코드는 다음과 같다.
import sys
N = int(sys.stdin.readline())
ropes = [int(sys.stdin.readline()) for _ in range(N)]
ropes.sort(reverse=True)
weight = 0
max_weight = ropes[0]
for i, rope in enumerate(ropes):
max_weight = max(max_weight, rope*(i+1))
print(max_weight)
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1449번 - 수리공 항승 (0) | 2021.01.03 |
---|---|
[백준] 4796번 - 캠핑 (0) | 2021.01.03 |
[백준] 1932번 - 정수 삼각형 (0) | 2021.01.02 |
[백준] 9461번 - 파도반 수열 (0) | 2021.01.02 |
[백준] 1541번 - 잃어버린 괄호 (0) | 2020.12.29 |