-
백준 7579 - 앱 (Python)BOJ PS/Python 2023. 1. 13. 14:26
https://acmicpc.net/problem/7579
7579번: 앱
입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활
www.acmicpc.net
다른 문제보다 빠르게 원트에 풀 수 있었던 문제였다. 보고 바로 냅색 문제임은 생각할 수 있었다.
다만 비용을 기준으로 정렬할지 메모리를 기준으로 정렬할지를 잠시 고민했다.
비용의 범위가 더 좁아 비용을 이용해 냅색을 진행했다. cost를 다 합한 것을 dp의 길이로 설정했다.
n,m=map(int,input().split()) m_lis=list(map(int,input().split())) #메모리 리스트 c_lis=list(map(int,input().split())) #비용 리스트 dp=[0]*(sum(c_lis)+1) #특정 비용에서의 최소의 메모리 이용 비용 저장 for i in range(n): memory = m_lis[i] cost = c_lis[i] for j in range(len(dp)-1,cost-1,-1): if dp[j]<dp[j-cost]+memory: dp[j]=(max(dp[j-cost]+memory,dp[j])) for i in range(len(dp)): if dp[i]>=m: print(i) exit(0)이 과정을 거칠 때, 이중 for문에서 안에 있는 것을 순방향으로 해서는 안 된다는 점을 기억해야 한다.
순방향으로 했다가는 업데이트를 한 번 한 것을 다시 해버리게 될 수 있다.
'BOJ PS > Python' 카테고리의 다른 글
백준 16209 - 수열 섞기 (Python) (0) 2023.01.13 백준 1766 - 문제집 (Python) (0) 2023.01.13 백준 12100 - 2048 (Easy) (Python) (0) 2023.01.13 백준 2342 - dance dance revoution (Python) (0) 2022.12.16 백준 2467 - 용액 (Python) (0) 2022.12.15