diff --git "a/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P01 JS2 1\353\241\234 \353\247\214\353\223\244\352\270\260.js" "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P01 JS2 1\353\241\234 \353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..47cdba0 --- /dev/null +++ "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P01 JS2 1\353\241\234 \353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,20 @@ +function solution(x) { + let memo = new Array(30001).fill(0); + for (let i = 2; i < x + 1; i++) { + memo[i] = memo[i - 1] + 1; + if (i % 2 === 0) { + memo[i] = Math.min(memo[i], memo[i / 2] + 1); + } + if (i % 3 === 0) { + memo[i] = Math.min(memo[i], memo[i / 3] + 1); + } + if (i % 5 === 0) { + memo[i] = Math.min(memo[i], memo[i / 5] + 1); + } + } + return memo[x]; +} + +console.log(solution(4)); + +// 1을 만든다는 의미는 최소값을 구한다고 생각하면 될듯 diff --git "a/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P02 JS3 \352\260\234\353\257\270 \354\240\204\354\202\254.js" "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P02 JS3 \352\260\234\353\257\270 \354\240\204\354\202\254.js" new file mode 100644 index 0000000..12853c9 --- /dev/null +++ "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P02 JS3 \352\260\234\353\257\270 \354\240\204\354\202\254.js" @@ -0,0 +1,13 @@ +function solution(n, k) { + let table = new Array(100).fill(0); + table[0] = k[0]; + table[1] = Math.max(k[0], k[1]); + for (let i = 2; i < n; i++) { + table[i] = Math.max(table[i - 1], table[i - 2] + k[i]); + } + return table[n - 1]; +} + +const N = 5; +const K = [1, 3, 6, 5, 4]; +console.log(solution(N, K)); diff --git "a/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P03 JS2 \353\260\224\353\213\245\352\263\265\354\202\254.js" "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P03 JS2 \353\260\224\353\213\245\352\263\265\354\202\254.js" new file mode 100644 index 0000000..d0e712c --- /dev/null +++ "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P03 JS2 \353\260\224\353\213\245\352\263\265\354\202\254.js" @@ -0,0 +1,12 @@ +function solution(n) { + let table = new Array(1001).fill(0); + table[1] = 1; + table[2] = 3; + for (let i = 3; i < n + 1; i++) { + table[i] = table[i - 1] + 2 * table[i - 2]; + } + + return table[n] % 796796; +} + +console.log(solution(3)); diff --git "a/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P04 JS3 \355\232\250\354\234\250\354\240\201\354\235\270 \355\231\224\355\217\220 \352\265\254\354\204\261.js" "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P04 JS3 \355\232\250\354\234\250\354\240\201\354\235\270 \355\231\224\355\217\220 \352\265\254\354\204\261.js" new file mode 100644 index 0000000..4d48d29 --- /dev/null +++ "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/P04 JS3 \355\232\250\354\234\250\354\240\201\354\235\270 \355\231\224\355\217\220 \352\265\254\354\204\261.js" @@ -0,0 +1,18 @@ +function solution(arr, target) { + let table = new Array(target + 1).fill(10001); + // target + 1 주의 그리고 바로 -1을 넣을 경우 최소값 판별시 혼돈이 올 수 있음 + table[0] = 0; + for (let i = 0; i < arr.length; i++) { + for (let j = arr[i]; j < target + 1; j++) { + if (table[j - arr[i]] !== 10001) { + table[j] = Math.min(table[j], table[j - arr[i]] + 1); + } + } + } + + return table[target] === 10001 ? -1 : table[target]; +} + +const currency = [2]; +const sum = 15; +console.log(solution(currency, sum)); diff --git "a/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/Q32 JS2 \354\240\225\354\210\230 \354\202\274\352\260\201\355\230\225.js" "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/Q32 JS2 \354\240\225\354\210\230 \354\202\274\352\260\201\355\230\225.js" new file mode 100644 index 0000000..b8cd014 --- /dev/null +++ "b/src/C6 \353\213\244\354\235\264\353\202\230\353\257\271 \355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/Q32 JS2 \354\240\225\354\210\230 \354\202\274\352\260\201\355\230\225.js" @@ -0,0 +1,17 @@ +function solution(n, triangle) { + let pre = triangle[0]; + let temp = []; + + for (let i = 1; i < n; i++) { + pre = triangle[i].map((val, idx) => { + if (idx === 0) return pre[0] + val; + if (idx === i) return pre[i - 1] + val; + return Math.max(pre[idx - 1], pre[idx]) + val; + }); + } + + return Math.max(...pre); +} + +const t = [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]; +console.log(solution(5, t));