코딩하는 덕구 🐶

67. Python 백준 2217 번 로프 자세한 설명 본문

알고리즘 문제 풀이

67. Python 백준 2217 번 로프 자세한 설명

코딩하는 덕구 🐶 2023. 1. 5. 13:36
728x90
반응형

 

로프들을 이용해 들어올릴 수 있는 최대 중량을 구하는 문제이므로

만약 로프 3개가 주어진다면

로프 1개가 들어올릴 수 있는 최대 중량, 

로프 2개가 들어올릴 수 있는 최대 중량,

로프 3개가 들어올릴 수 있는 최대 중량을 비교해서 가장 높은 중량을 선택하면 되겠죠.

그럼 이 중량들은 어떻게 구하면 될까요?

 

로프 1개의 최대 중량은 로프들 중에 최대 중량이 가장 높은 로프를 선택하면 되겠죠.

로프 2개의 최대 중량은 로프들 중에 최대 중량이 가장 높은 순서대로 1번 로프, 2번 로프를 선택한 후

2번 로프의 최대 중량에 2를 곱하면 됩니다.

로프들 중에 가장 약한 로프가 버틸 수 있는 최대 중량까지 중량을 걸어야 최대 중량이기 때문이죠.

그럼 로프가 3개라면?

3개의 로프 중 가장 약한 로프가 버틸 수 있는 최대 중량 * 3을 해주면 됩니다.

 

j개라면?

가장 약한 로프 최대중량 * j 가 되겠죠.

 

그럼 위의 직관을 가지고 코드를 구현해봅시다.

 

로프들을 리스트 안에 저장한 후 내림차순으로 정렬합니다.

N = int(input())
ropes = []
for _ in range(N):
    ropes.append(int(input()))

ropes.sort(reverse=True)

 

각 로프의 개수마다 최대 중량을 저장할 리스트 weights를 선언한 후

weights = []
for j in range(N):
    weights.append(ropes[j] * (j+1))

print(max(weights))

ropes는 큰 수부터 작은 수 순서대로 정렬된 리스트 이므로

ropes 안의 j번 째 로프는 j개의 로프 중 최대 중량이 가장 작은 로프가 되고,

j+1은 로프의 개수가 되므로 ropes[j] * (j+1)은

j+1개의 로프들을 이용한 최대 중량을 찾는 식이 됩니다.

이 값들을 로프들의 개수별 최대 중량을 저장할 weights 리스트에 저장 한 후

가장 큰 값을 출력하면 답이 되겠죠

 

Python 백준 2217 번 로프  최종 코드입니다.

N = int(input())
ropes = []
for _ in range(N):
    ropes.append(int(input()))

ropes.sort(reverse=True)
weights = []
for j in range(N):
    weights.append(ropes[j] * (j+1))

print(max(weights))

 

 

Python 백준 2217 번 로프  자세한 설명이었습니다.

감사합니다.

728x90
반응형