[백준] Python 11052번 16194번 카드구매

syeony·2024년 12월 13일
0

python

목록 보기
20/20

11052번

문제 바로가기:https://www.acmicpc.net/problem/11052

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int,input().split()))
arr.insert(0,0)
dp = [0] * (n+1)

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

print(dp[n])

당시 참고했던 블로그:https://jyeonnyang2.tistory.com/56

DP...점화식 세우는게 너무 어렵다.
결국 오늘도 답 먼저 봐버렸다.
하지만 답만 보고 넘어가는 것은 의미가 없을 것 같아 그림을 그리며 확실히 머리에 박아두었다.

다음주에 한 번 더 풀어봐야지

16194번

문제 바로가기:https://www.acmicpc.net/problem/16194

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int,input().split()))
arr.insert(0,0)
dp = [10001] * (n+1)
dp[0] = 0

for i in range(1,n+1):
    for j in range(1,i+1):
        dp[i] = min(dp[i],arr[j]+dp[i-j])

print(dp[n])

바뀐건
1. max를 min으로 바꾼 것과,
2. dp를 10001로 초기화했다는 것과,
3. 0번째 dp를 0으로 선언해놓았다는 것.

그래도 두번째 문제는 첫번째 문제에서 조금만 변형하면 풀 수 있는 문제라고 생각하여 답을 보진 않고 직접 풀어보았다.

한줄평

약간 끼워맞추기식으로 푸는 것 같은 느낌이지만...
그게 DP인듯하다. DP는 아직 어렵다...

profile
모바일 어플리케이션, cross platform과 iOS에 관심이 많은 개발자 오승연입니다

0개의 댓글