Save Princess
-
[문제해결을 위한 창의적 알고리즘] 공주 구하기2 (고급, p191)알고리즘 2017. 2. 17. 17:07
앞선 포스트에서 메모이제이션 방법을 이용하여 푸는 방법을 적어보았다. 그러나 역시 동적계획법을 사용해야 성능이 보장된다고 할 수 있으므로, 이번에는 동적계획법 (Dynamic Programming) 방법을 이용해 푸는 방법을 알아보고자 한다. 책에는 오타가 있음을 유의한다. 아래에서 DT[a][b]=가는 다리오가 a의 위치 섬에, 오는 다리오가 b의 위치 섬에 있을 수 있는 모든 경우의 수라고 정의한다. import java.util.Scanner; public class SavePrincessSol197 { public static final int MOD = 1000;public static int n;// 풀이에서는 array size가 501로 선언되어 있으나 n이 3~20까지이므로 20이면 충분..
-
[문제해결을 위한 창의적 알고리즘] 공주 구하기 (고급, p191)알고리즘 2017. 2. 11. 20:58
이 문제도 중급에서 다뤘던 문제이지만, 여기서는 성능을 좀 더 개선해 볼 수 있는 방법으로 메모이제이션 기법을 이용한 풀이를 적어보고자 한다. 두명의 다리오가 있다고 하고 한명은 유시섬에서 후퍼섬으로 가고 한명은 후퍼섬에서 유시섬으로 오는 상황에서 f(a, b, k) = "가는 다리오가 a 위치의 섬에 있고, 오는 다리오가 b 위치의 섬에 있으며, 다음으로 방문할 섬은 k위치의 섬에 대해서 탐색하려고 하는 상태"로 정의한다. import java.util.Scanner; public class SavePrincessSol195 { public static final int MOD = 1000;public static int n;public static int[] D = new int[501];public..