본문 바로가기
코딩테스트 파이썬/백준

나무꾼 이다솜 ( 1421 번 )

by 세용용용용 2025. 8. 11.

1421번: 나무꾼 이다솜

 

 

 


🧠 알고리즘

  • 완전 탐색(Brute Force)

 

✔️ 동작 방식

  • 절단 길이(lenth)를 1부터 가장 긴 나무 길이까지 반복
  • 모든 길이에서의 이익 중 최댓값 출력

 

🧾 코드

import sys

def _cr_price(lenth, tree_len):
    answer = 0
    for tree in tree_len:
        split_ct = tree // lenth
        if split_ct == 0: # 조각이 안나오면.. bypass
            continue
        
        na = tree % lenth

        split_cost = (split_ct * c) if na else ((split_ct - 1) * c)

        now_cost = ((split_ct * w * lenth) - split_cost)
        
        if now_cost > 0: # 이득이 나는 경우 가져다 팔음!!
            answer += now_cost

    return answer


def _main():
    answer = 0
    tree_len = [int(sys.stdin.readline().rstrip()) for _ in range(n)]

    for lenth in range(1, max(tree_len) + 1):
        now_price = _cr_price(lenth, tree_len)
        answer = max(answer, now_price)
        
    return answer
    
n, c, w = map(int, sys.stdin.readline().rstrip().split())
print(_main())

 

⏱️ 시간 복잡도

for lenth in range(1, max(tree_len) + 1) : 절단 길이 순회 ( 선형 시간 )
    _cr_price(lenth, tree_len) : 나무를 순회하며 비용 증감 ( 선형 시간 )

해당 알고리즘 시간 복잡도 : 이차형 시간 복잡도 ( O(n ** 2) )

 

'코딩테스트 파이썬 > 백준' 카테고리의 다른 글

지름길 ( 1446 번 )  (3) 2025.08.17
뒤집기 II ( 1455 번 )  (2) 2025.08.17
행운의 문자열 ( 1342 번 )  (1) 2025.08.02
효율적인 해킹 ( 1325 번 )  (0) 2025.08.02
동물원 ( 1309 번 )  (0) 2025.08.02