Sticker
실수한 맞은 문제 복습
int[][] d = new int[3][n+1];
d[0][0] = 0;
for(int i=1;i<=n;i++) {
if(i-1>=0) {
//d[0][i] = 0;
d[0][i] = Math.max(Math.max(d[0][i-1], d[1][i-1]),d[2][i-1])+a[0][i];
d[1][i] = Math.max(d[0][i-1], d[2][i-1])+a[1][i];
d[2][i] = Math.max(d[0][i-1], d[1][i-1])+a[2][i];
}
}
실수한 부분
처음 생각했던 d[0][ i ] : (아래의 코드가 정답)
d[0][i] = Math.max(Math.max(d[0][i-1], d[1][i-1]),d[2][i-1])+a[0][i];
d[0][ i ]는 i번째 열에서 아무것도 선택하지 않았을 때(0) 갖는 스티커합의 최댓값을 의미하는데, 이 때 경우의 수로 착각하여 모든 i에 대하여 d[0][ i ]를 0으로 초기화해버려 오답이 되었다.
결론
처음 생각한 것이 맞았는데 착각함.
Last updated
Was this helpful?