1. 문제
https://www.acmicpc.net/problem/1421
1421번: 나무꾼 이다솜
첫째 줄에 이다솜이 가지고 있는 나무의 개수 N과 나무를 자를 때 드는 비용 C와 나무 한 단위의 가격 W이 주어진다. 둘째 줄부터 총 N개의 줄에 이다솜이 가지고 잇는 나무의 길이가 한 줄에 하나
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
# n : 나무 개수, c : 나무 자르는 비용, w : 나무 단위 당 가격
n, c, w = map(int, input().split())
# n_l : 나무 길이 리스트
n_l = [int(input()) for i in range(n)]
# maxN : 가장 긴 나무 길이
maxN = max(n_l)
# maxCost : 가장 비싸게 판 가격
maxCost = 0
# 나무의 단위를 1부터 가장 긴 길이까지 반복하여 잘라준다.
for i in range(1, maxN + 1):
# cost : 단위 별 비용
cost = 0
# 단위 별로 각 나무를 잘라 비용을 확인하기 위해 반복문을 돌려준다.
for j in n_l:
# cnt : 자른 나무 수
# remain : 자르고 남은 나무
cut, remain = divmod(j, i)
# jCost : 나무 별 비용
# 자르고 남은 나무가 있다면 자른 나무 수 만큼 커팅 비용을 누적
if remain:
jCost = -(cut * c)
# 자르고 남은 나무가 없다면 자른 나무 수 - 1 만큼 커팅 비용을 누적
else:
jCost = -((cut - 1) * c)
# 자른 나무 수 * 나무 단위 당 비용 * 자른 단위를 비용에 누적
jCost += (cut * w * i)
if jCost < 0:
continue
else:
cost += jCost
maxCost = max(maxCost, cost)
print(maxCost)
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 기타콘서트(1497) (0) | 2023.04.08 |
---|---|
(Python)백준 코딩테스트 연습 - 뒤집기 II(1456) (0) | 2023.04.01 |
(Python)백준 코딩테스트 연습 - 비슷한 단어(1406) (0) | 2023.03.27 |
(Python)백준 코딩테스트 연습 - 에디터(1406) (0) | 2023.03.25 |
(Python)백준 코딩테스트 연습 - 폴짝폴짝(1326) (0) | 2023.03.18 |