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