티스토리 뷰

'카드 구매하기'

코드

n = int(input())
array = [0] + list(map(int, input().split()))

d = [0 for i in range(n+1)]
for i in range(n+1):
    d[i] = array[i]

for i in range(n+1):
    for j in range(i+1):
        d[i] = max(d[i], d[i-j] + d[j])

print(d[n])

풀이

1. 자기자신이 max인 경우도 있기 때문에 dp테이블 d를 array로 초기화해준다.

2. 앞에서부터 자기자신까지 모든 경우의 수를 살펴보며 max인 것을 찾는다.

comment

코드는 굉장히 단순한데 이해하기가 너무 어려웠다. 별거 아닌거같았는데 dp문제는 항상 내 뒤통수를 친다.

그리고 dp문제는 이해한 것을 말로 풀이하는 것이 정말 어렵다. 말로 적어야 더 이해가 가고 오래 기억에 남을 것 같아서 계속 연습하고 있는데, 쉽지가 않다.

'algorithm > 백준' 카테고리의 다른 글

[algorithm] 파이썬 - 백준 11057  (0) 2022.06.21
[algorithm] 파이썬 - 백준 1715  (0) 2022.04.30
[algorithm] 파이썬 - 백준 3671  (0) 2022.04.29
[algorithm] 파이썬 - 백준 1080  (0) 2022.04.27
[algorithm] 파이썬 - 백준 2616  (0) 2022.04.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함