swc0317   1년 전

AR 배열에 주어지는 N개의 시간과 이익값을 담았습니다.

dp[i][j]는 i는 1부터 시작해 N까지 시간이고 j는 해당 날짜를 잡을지 말지 결정한 값입니다.


N이 문제에서 주어진 범위가 1 ~ 15이면 N 최댓값은 15인데 dp배열이 [16][2]때와 AR[16]일때 통과하지 못합니다.

배열 크기를 17로 높여주면 바로 통과합니다. 

배열크기가 16일때도 통과해야 하는 것 아닌가요?;;

제가 잘못 생각한건가요??

adfsfsf   1년 전

문제가 된 부분은 n>N+1 처럼, N이 아니라 N+1과 비교를 하셨기 때문이라 생각됩니다. 그래서 N번째 자리가 필요해져서 최종적으로는 N+1개의 칸이 최소 필요 칸이 된 거죠.

여기서부터는 적으신 코드에 대해 적어드리고 싶은 겁니다. dp, 즉, 다이나믹 프로그래밍은 현재 가진 정보를 사용하여 다음 정보를 구하는 기법입니다. 하지만 사용하신 방법은 재귀적 방법입니다. dp로 풀고 싶으시다면 마지막 날에서의 수익부터 거꾸로 계산해야 합니다. 그렇게 하면 현재 날의 일을 할 때 그 후 받을 수 있는 최댓값을 이미 알고 있으므로 그 값을 다시 구할 필요가 없죠. 반복이 많이 되는 값들부터 처리해서 속도를 높이는 기법이 dp입니다.

swc0317   1년 전

15

1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000
1 1000

위와 같은 예시를 넣었을 때

함수의 맨처음을 n > N + 1 이라는 조건문으로 현재 참조하는 날짜를 정하면

해당 날짜가 퇴삿날, 16일이더라도 거르지 못하는 문제가 있었네요.

근데 16일은 dp안에 존재하지 않는 날짜구요ㅠㅠ

그래서 조건문을 수정하니 배열 크기가 16이더라도 통과하네요.

댓글을 작성하려면 로그인해야 합니다.