1082 - 방 번호

태규 최·2022년 1월 4일
0

Algorithm

목록 보기
4/8
post-thumbnail
n = int(input())

arr = list(map(int, input().split()))

m = int(input())

dp = [0] * 51

for idx, i in enumerate(arr):
    if idx:
        dp[i] = max(dp[i], idx)

answer = 0
for money in range(m + 1):
    for idx, cost in enumerate(arr):
        if money +cost <= m:

            dp[money + cost] = max(dp[money + cost] , (dp[money]* 10) + idx)
            answer = max(answer ,dp[money + cost])
print(answer)

간단한 다이나믹 프로그래밍 문제

dp[현재 가지고 있는 돈으로 가장 큰 방 번호] 로 정의 하였고

풀이는

loop를 두번 돌면서
for 현재 가지고 있는 돈 ~ m
for 방번호, 방 번호의 값 ~ Pn-1
dp[현재 가지고 있는 돈 + 방 번호의 값] = max(dp[현재 가지고 있는 돈 ] * 10 + 방 번호 , dp[현재 가지고 있는 돈 + 방 번호의 값] )
으로 풀었다.

루프를 두 번 돌기에 시간 복잡도는 O(N^2)이다.

0개의 댓글

관련 채용 정보