본문 바로가기
Algorithm

[DP/동적계획법] 백준 1965 상자넣기 - 파이썬(Python)

by jangThang 2023. 7. 2.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1965번: 상자넣기

    정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     상자의 크기가 나열된 수열이 주어집니다. 이전에 연속적으로 나왔던 작은 상자들은 이후에 나오는 큰 상자에 넣을 수 있습니다. 가장 많이 넣은 상자의 개수를 구해야 합니다.

     

    2022.04.13 - [Algorithm] - [DP/동적계획법] 백준 11055 가장 큰 증가 부분 수열 - 파이썬(Python)

     

    [DP/동적계획법] 백준 11055 가장 큰 증가 부분 수열 - 파이썬(Python)

    [ Contents ] 1. 문제 (링크 참조) 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 10

    star7sss.tistory.com

     사실상 '가장 큰 증가 부분 수열'의 길이를 구하는 문제입니다.

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    # 입력
    n = int(input())
    case = list(map(int, input().split()))
    
    # DP
    dp = [1 for _ in range(n)]
    for i in range(1, n):
        for j in range(i):
            # 해당 상자가 작으면
            if case[i] > case[j]:
                # 해당 상자를 넣는 게 나은지, 아닌지 판별
                dp[i] = max(dp[i], dp[j]+1)
    print(max(dp))

     문제는 분명 다르지만, 코드는 백준 11055 가장 큰 증가 부분 수열과 똑같습니다.

     DP는 코드 구현이 어렵기 보다는... 문제를 이해하고 캐시를 구성하는 게 중요합니다.

     

    star가 되고나서 Tistory

    반응형

    댓글