백준[JS] > 1446번 지름길
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/1446문제풀이DP로 연산횟수를 최적화하여 풀 수 있다. dp[1]은 1의 거리를 갔을 때 최소거리를 의미하며 순서대로 dp[1], dp[2], dp[3] ... 채워가면서 마지막에 dp[D]를 구할 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, D] = input .shift() .split(" ") .map((n) => Number(n));let dp = Array(D + 1).fill(0);let shortcut = input.map((str) => { return st..
백준[JS] > 9655번 돌게임
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/9655풀이직접 N=1,2,3,4,5, ... 일 때 SK인지 CY인지 확인해보면 그 규칙성이 보인다. 규칙성을 확인한 순간 문제는 쉽게 풀린다. 처음 접근할때는 만약 돌이 2개있다면 상근(SK)이가 한번에 2개 다 가져갈 수 있을 줄 알았는데 2개 가져갈 수 없다고 가정하고 문제를 풀어야 한다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString();let N = Number(input);let answer = "SK";if (N % 2 === 0) { answer = "CY";}console.log(answer);
프로그래머스[JS] > 완전범죄
·
🔒Algorithm
🧩문제링크https://school.programmers.co.kr/learn/courses/30/lessons/389480 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🧩문제풀이➕dfs로 접근 -> 실패 ( 시간초과 )dfs로 푼 문제풀이다. 하지만 시간초과가 났다.function solution(info, n, m) { let dp = Array.from({ length: info.length + 1 }, () => { return Array(m).fill(Infinity); }); dp[0][0] = 0; for (let r = 1; r { if..
백준[JS] > 11726번 타일링
·
🔒Algorithm
문제https://www.acmicpc.net/submit/11726/90108724풀이2xi 크기의 타일을 채우는 방법은 2x(i-1) 크기의 타일을 채우는 방법의 수와 2x(i-1) 크기의 타일을 채우는 방법의 수를 합산한 값과 같다는 걸 알수 있어야 한다. 만약 dp[i] 가 2 x i 크기의 타일을 채우는 방법의 수라고 하면 점화식은 dp [ i ] = dp [ i-1 ] + dp [ i-2 ] 이다. 이 점화식을 이용하면 문제를 풀 수 있다. dp[1], dp[2], dp[3] 을 직접 구해보면 점화식이 성립함은 쉽게 알 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();const n = ..
백준[node.js] > 9461번 파도반 수열
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/9461문제풀이dp[i] = dp[i - 1] + dp[i - 5]; 라는 점화식만 도출하면 쉽게 풀 수 있는 문제이다.( i 번째 삼각형의 한변의 길이 =  i-1번째 변의 길이 + i-5번째 변의 길이 ) let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");const testCaseCount = Number(input.shift());input = input.map((n) => Number(n));let dp = [0, 1, 1, 1, 2, 2, 3, 4, 5, 7, 9]; // P(1) P(2) P(3) P(4) p(5..
백준[node.js] > 11727번 2xn 타일링 2
·
🔒Algorithm
문제https://www.acmicpc.net/problem/11727 풀이문제의 핵심은 다음과 같은 점화식을 구하는 것이다. dp[i] = dp[i-1] + dp[i-1]*2  dp[i] 는 2xI 직사각형의 타일을 채우는 방법이다.  해당 점화식만 도출하면 쉽게 풀 수 있다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();let N = Number(input);let dp = Array(N + 1).fill(0);dp[1] = 1;dp[2] = 3;for (let i = 3; i
백준[node.js] > 1463번 1로 만들기
·
🔒Algorithm
문제https://www.acmicpc.net/problem/1463 문제풀이dp로 접근하지 않으면 시간초과가 나는 문제였다. 문제풀이의 핵심은 아래 점화식이다. 여기서 dp[i] 는 i를 만들기 위해서 필요한 연산 횟수이다. ( dp[1]=0, dp[2]=1, dp[3]=1 이다 )   1 ) i가 3의배수이고 2의 배수일 때dp[i] = Math. ( dp[i/3] +1 , dp[i/2] +1 , dp[i-1] +1 )    2 ) i가 3의 배수이고 2의 배수가 아닐때dp[i] = Math. ( dp[i/3] +1 , dp[i-1] +1 )    3 ) i가 2의 배수이고 3의 배수가 아닐때dp[i] = Math. ( dp[i/2] +1 , dp[i-1] +1 )     let fs = requir..
백준[node.js] > 12865번 평범한 배낭
·
🔒Algorithm
문제https://www.acmicpc.net/problem/12865 풀이let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, K] = input[0].split(" ").map((num) => Number(num));let arr = [];for (let i = 1; i Number(num)));}let dp = Array.from({ length: N + 1 }, () => { return Array(K + 1).fill(0);});for (let row = 1; row = weight) { dp[row][col] = Math.max(dp[ro..
백준[node.js] > 9251번 LCS
·
🔒Algorithm
문제https://www.acmicpc.net/problem/9251내풀이LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.이 문제는 유명한 문제라고 하는데 처음에 어떻게 접근할 지 몰라 다른사람들의 풀이를 참고하였다.간단하게 ACAYKPCAPCAK두문자의 LCS를 찾으려면 아래와 같은 2 차원 배열을 만들고 채워서 가장 큰 수를 확인하면 된다.       A  C  A  Y  K  P     C   A   P   C   A  K    이렇게 2차원 배열을 만들고 채우면 된다. 위 2차원배열을 dp라고 칭하면 dp[0][3] 은 문자열 C와 문자열 ACAY 의 LCS길이로 채워진다...
백준[node.js] > 9095번 1, 2, 3 더하기
·
🔒Algorithm
문제https://www.acmicpc.net/problem/9095 풀이dp로 푼 문제풀이이다. 이 풀이가 최적화된 풀이이고 밑에 보면 dfs로도 푼 문제가 있다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");input = input.map((n) => Number(n));for (let i = 1; i   처음에 dfs로 접근했는데 그럴 필요가 없었다. 참고차 남겨둔다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");input = input.map((n) ..