DP 2

백준 11052(JAVA)

문제 https://www.acmicpc.net/problem/11052 풀이 민규는 N개의 카드를 사는데 최대 가격을 지불해야한다. 최초 시도할때 나의 생각은 N개의 카드를 산다하면 1개가든 팩 N개, 1개가 든 팩 N - 1개 + 2개가 든 팩 1개, 1개가든 팩 N - 2개 + 2개가 든 팩 2개, ... 이런식으로 경우의수를 모두 구해서 최대값을 구해야하나? 즉 브루트포스로 풀어야하나란 생각을 했다. 이렇게 생각하니 어떻게 풀어야할지도 모르겠고 막막했다. 그래서, dp를 통해서 풀자! 라는 생각을 했다. i개의 카드를 사기위해 최대 가격을 지불해야한다. 이미 dp테이블에 1부터 i - 1까지 카드를 살때 최대 가격이 적혀져있다고 가정하자. 그렇다면, i개를 사기 위해 따져봐야하는 경우는 dp[1]..

algorithm 2021.09.27

백준 1932(JAVA)

문제 풀이 맨 위에서부터 한 레벨씩 내려가면서, 왼쪽 아래, 왼쪽 오른쪽의 합을 더하며 dp 테이블에 값을 저장하면 된다. 높이는 최대 500이고, 내려가면서 현재 높이의 개수 * 2만큼 탐색하므로(2 + 4 + 6 + 8 + ... + 1000) 시간초과 날 걱정은 안해도된다. 물론 문제에서 풀라는 것과같이 이미 값이 있으면 최대값으로 dp 테이블을 갱신해 나가며 풀면된다. 반복문을 이용한 bottom up으로 dp테이블에 값을 적어가며 메모이제이션을 구현했고 해당 메모된 값을 계속 업데이트하며 문제를 풀었다. 나는 ArrayList를 이용했다. 코드 package baekjoon.DP; import java.io.BufferedReader; import java.io.IOException; impor..

algorithm 2021.09.07