파이썬 백준 2217번
실버 4
https://www.acmicpc.net/problem/2217
문제 보기
분류: 수학, 그리디 알고리즘, 정렬
문제 풀기
최대 중량을 들기 위해서는 단일 로프가 허용하는 중량이 클수록 그리고 중량을 분산할 로프가 많을수록 유리하다.
따라서 임의의 순서로 주어지는 로프의 중량 정보를 내림차순 정렬을 하고 가장 허용 중량이 작은 로프부터 하나씩 제거해 가며 최댓값을 찾는다.
내림차순 정렬된 로프 리스트에서 맨 오른쪽 데이터를 하나씩 pop() 시켜 분산하여 들수 있는 값 weight 를 계산한다.
매 for loop 를 돌때마다 weight 값이 그 전의 최대값인 max_weight 보다 크면 새로 저장한다.
제일 작은 로프를 하나씩 지워가며 모든 경우를 따져 보고 저장된 max_weight 값을 출력한다.
코드 보기
import sys
inputdata = sys.stdin.readline
def fnMaxWeight(N):
max_weight = 0 ## 최대 질량 초기화.
rope_ls.sort(reverse = True) ## 오른쪽 pop 을 하기위해 내림차순 정렬.
# print(rope_ls) # test print
for _ in range(N):
rope_temp = rope_ls.pop() ## 제일 작은 로프부터 하나씩 빼냄.
weight = rope_temp * (len(rope_ls) + 1) ## 빼낸 로프와 더 긴 나머지 로프들이 가질수 있는 무게 저장.
if max_weight <= weight: ## 새로 계산된 weight 와 이전 반복문에서 저장된 max_weight 와 비교.
max_weight = weight ## 새 weight 가 더 크면 max_weight 로 전환.
print(max_weight) ## 가장 긴 로프를 중심으로 모든 경우가 계산된 max_weight 값 출력.
if __name__ == "__main__":
N = int(inputdata().strip())
rope_ls = []
for _ in range(N):
rope_ls.append(int(inputdata().strip()))
# print(rope_ls) # test print
fnMaxWeight(N)
추가 하기
import sys
inputdata = sys.stdin.readline
def fnMaxWeight(N):
max_weight = 0 ## 최대 질량 초기화.
rope_ls.sort(reverse = True) ## 오른쪽 pop 을 하기위해 내림차순 정렬.
print(f'rope_ls: {rope_ls}') # test print
for _ in range(N):
rope_temp = rope_ls.pop() ## 제일 작은 로프부터 하나씩 빼냄.
weight = rope_temp * (len(rope_ls) + 1) ## 빼낸 로프와 더 긴 나머지 로프들이 가질수 있는 무게 저장.
if max_weight <= weight: ## 새로 계산된 weight 와 이전 반복문에서 저장된 max_weight 와 비교.
max_weight = weight ## 새 weight 가 더 크면 max_weight 로 전환.
print(f'weight: {weight}') # test print
print(f'max_weight: {max_weight}') # test print
print(f'rope_ls: {rope_ls}') # test print
print(max_weight) ## 가장 긴 로프를 중심으로 모든 경우가 계산된 max_weight 값 출력.
if __name__ == "__main__":
N = int(inputdata().strip())
rope_ls = []
for _ in range(N):
rope_ls.append(int(inputdata().strip()))
print(rope_ls) # test print
fnMaxWeight(N)
# 3
# 10
# 5
# 18
# [10, 5, 18]
# rope_ls: [18, 10, 5]
# weight: 15
# max_weight: 15
# rope_ls: [18, 10]
# weight: 20
# max_weight: 20
# rope_ls: [18]
# weight: 18
# max_weight: 20
# rope_ls: []
# 20
'공부하기 > 백준' 카테고리의 다른 글
[Python] 백준 풀기 1297 - TV 크기 (0) | 2022.12.12 |
---|---|
[Python] 백준 풀기 1080 - 행렬 (0) | 2022.12.11 |
[Python] 백준 풀기 1789 - 수들의 합 (0) | 2022.12.09 |
[Python] 백준 풀기 2212 - 센서 (0) | 2022.12.08 |
[Python] 백준 풀기 12904 - A와 B (0) | 2022.12.07 |