diff --git a/src/main/java/algorithms/curated170/medium/fourkeyskeyboard/FourKeysKeyboardDP.java b/src/main/java/algorithms/curated170/medium/fourkeyskeyboard/FourKeysKeyboardDP.java new file mode 100644 index 00000000..c5cd1c01 --- /dev/null +++ b/src/main/java/algorithms/curated170/medium/fourkeyskeyboard/FourKeysKeyboardDP.java @@ -0,0 +1,27 @@ +package algorithms.curated170.medium.fourkeyskeyboard; + +public class FourKeysKeyboardDP { + + public int maxA(int N) { + int[] best = new int[N + 1]; + + for (int press = 1; press <= N; press++) { + best[press] = best[press - 1] + 1; + if (press > 6) { + best[press] = Math.max(best[press], best[press - 4] * 3); + best[press] = Math.max(best[press], best[press - 5] * 4); + best[press] = Math.max(best[press], best[press - 6] * 5); + } + } + return best[N]; + } + + public static void main(String[] args) { + var solution = new FourKeysKeyboardDP(); + + for (int i = 0; i < 50; i++) { + System.out.println(solution.maxA(i)); + } + + } +} \ No newline at end of file diff --git a/src/main/java/algorithms/curated170/medium/fourkeyskeyboard/FourKeysKeyboardMath.java b/src/main/java/algorithms/curated170/medium/fourkeyskeyboard/FourKeysKeyboardMath.java new file mode 100644 index 00000000..b2456667 --- /dev/null +++ b/src/main/java/algorithms/curated170/medium/fourkeyskeyboard/FourKeysKeyboardMath.java @@ -0,0 +1,23 @@ +package algorithms.curated170.medium.fourkeyskeyboard; + +public class FourKeysKeyboardMath { + + final int[] first16Max = new int[] { 0, 1, 2, 3, 4, 5, 6, 9, 12, 16, 20, 27, 36, 48, 64, 81 }; + + public int maxA(int N) { + int quadrupleTimes = N > 15 ? (N - 11) / 5 : 0; + return getQuadrupledCount(N - 5 * quadrupleTimes, quadrupleTimes); + } + + private int getQuadrupledCount(int index, int quadrupleTimes) { + return first16Max[index] << (2 * quadrupleTimes); + } + + public static void main(String[] args) { + var solution = new FourKeysKeyboardMath(); + + for (int i = 0; i < 50; i++) { + System.out.println(solution.maxA(i)); + } + } +} \ No newline at end of file