-
9465번 : 스티커알고리즘/백준(acmicpc.net) 문제풀이 2018. 6. 6. 14:18반응형
까다롭게 보이지만, 실제로는 전혀 까다롭지 않다.
행은 2행으로 고정되어있고 열이 유동적이니 1열부터 n열까지 dp를 채워나가면 될 것 같다.
각 열마나 선택지가 총 3개가 있다. 아무것도 선택하지 않거나, 1행을 선택하거나 2행을 선택하는 것이다.
i번째 열에서 아무것도 선택하지 않을 때 dp에는 dp[i][0]으로 들어간다.
1행을 선택하면 dp[i][1], 2행을 선택하면 dp[i][2]로 들어간다.
편의상 MAX(a, b)는 a와 b중 더 큰값을 반환하고, MAX3(a, b, c)는 a, b, c 중 제일 큰값을 반환한다.
1) 아무것도 선택하지 않을 때 그 이전 열까지 합이 최대가 되는 dp의 값을 그대로 갖는다.
ex)dp[3][0]=MAX3(dp[2][0], dp[2][1]. dp[2][2])가 된다.
2) 1행을 선택했을 때는 이전 열에서 아무것도 선택하지 않았을 때와 2번째 행을 선택했을 경우 두가지 중 하나를 갖는다.
ex)dp[3][1]=MAX(dp[2][0], dp[2][2]);
3) 2행을 선택했을 때는 이전 열에서 아무것도 선택하지 않았을 때와 1번째 행을 선택했을 경우 두가지 중 하나를 갖는다.
ex)dp[3][2]=MAX(dp[2][0]. dp[2][1]);
마지막으로 값을 출력할 때는 dp[N][0], dp[N][1], dp[N][2] 중 가장 큰 하나를 골라주면 된다.
반응형'알고리즘 > 백준(acmicpc.net) 문제풀이' 카테고리의 다른 글
2294번 : 동전2 (0) 2018.06.07 2167번 : 2차원 배열의 합 (0) 2018.06.06 2163번 : 초콜릿 자르기 (0) 2018.06.05 1010번 : 다리 놓기 (0) 2018.06.05 2156번 : 포도주 시식 (0) 2018.06.04