일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Crawling
- typescript
- 수학
- Algorithm
- 그래프
- TCP
- 프로그래머스 레벨 2
- 자바스크립트
- 레벨 1
- 타입스크립트
- javascript
- dp
- HTTP 완벽 가이드
- 타입 챌린지
- Nestjs
- 크롤링
- ip
- 백준
- 문자열
- Node.js
- BFS
- HTTP
- 알고리즘
- dfs
- type challenge
- 소켓
- socket
- 프로그래머스
- 쉬운 문제
- 가천대
- Today
- Total
목록dp (18)
kakasoo
꽤 어려웠다. // 백준 14501번 퇴사 문제를 풀었습니다. const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let count = 0; const input = []; rl.on("line", (line) => { if (count === 0) { count = Number(line); } else { input.push(line); if (input.length === count) { main(); rl.close(); } } }).on("close", () => { process.exit(); }); const main = ..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { main(line); rl.close(); }).on("close", () => process.exit()); /** * * @param {string} line */ const main = (line) => { const [N, K] = line.split(" ").map(Number); const DP = new Array(K + 1).fill(0); // DP[k][N] : k개로 N을 만드는 경우의 수 for (let i = 0; i
요즘 DP 문제만 주구장창 풀고 있는데, DP를 푸는 요령은 이렇다. 먼저 DP[n]이 의미하는 것이 무엇인지 찾는다. 이 문제에는 DP[n]의 정의는, n을 만들기 위해서 필요한 최소 제곱수 항이었다. DP[n]을 그러면 숫자들의 나열로 생각한다. ( 이 문제는 합이기 때문에 덧셈의 나열로 생각하면 된다. ) 거기서 마지막이 무엇인지 생각한다. 이 문제에서는 당연히, n의 제곱근이 될 것이다. 그렇다면 우리가 알 수 있는 게 생긴다. DP[n - 마지막 값의 제곱] + 1이 DP[n]이라는 점화식이다. const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let count = 0; rl.on("line", (line) => { if (!count) { count = Number(line); } else { main(line); } }); /** * * @param {string} line */ const main = (line) => { const numbers = line.split(" ").map(Number); const DP = new Array(numbers.length).fill(0); for (let i = 0; i < ..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { main(Number(line)); rl.close(); }).on("close", () => { process.exit(); }); /** * * @param {number} line */ const main = (line) => { const DP = new Array(line + 1).fill(0); DP[2] = 3; for (let i = 4; i
부분 수열 문제랑 똑같은데, 연속이라는 점 때문에 2중 포문을 만들 필요가 없었다. const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let count = 0; rl.on("line", (line) => { if (!count) { count = Number(line); } else { main(line); rl.close(); } }).on("close", () => { process.exit(); }); /** * * @param {string} line */ const main = (line) => { const numbers..
이전 부분 수열 문제들처럼 풀되 조건만 바꿔주면 된다. 그런데 나는 틀렸었는데, 그 이유는 DP[i]의 값을 1로 초기화했기 때문이다. 이전 문제들은 개수를 세는 것이기 때문에 전부 1로 시작했겠지만, 이건 합산하는 것이기 때문에 각 DP[i]는 자기 차례의 숫자가 초깃값으로 저장되어야 한다. const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.output, }); let count = 0; rl.on("line", (line) => { if (!count) { count = Number(line); } else { main(line); rl.close(..
이전 문제는 결국 다른 사람의 코드를 참고했지만, 이 문제를 풀 때는 어제의 기억으로 그냥 풀 수 있었다. 사실 어제 문제랑 똑같다. 다른 점이 있다면 감소한다는 부분인데, 자바스크립트에서는 reverse라는 내장 함수가 있기 때문에 그냥 거꾸로 돌린 후에 똑같이 풀어주면 된다. const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.output, }); let count = 0; rl.on("line", (line) => { if (!count) { count = Number(line); } else { main(line); rl.close(); } })...
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let count = 0; const input = [0]; rl.on("line", (line) => { if (!count) { count = Number(line); } else { input.push(Number(line)); if (input.length === count + 1) { main(); rl.close(); } } }).on("close", () => { process.exit(); }); const main = () => { const DP = new Arra..
const readline = require("readline"); const input = []; let count = 0; const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { if (!count) { count = 3 * line; } else { input.push(line); if (input.length % 3 === 0) { main(); } if (input.length === count) { rl.close(); } } }).on("close", () => { process.exit(); }); const main = () => { cons..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { main(Number(line)); rl.close(); }).on("close", () => { process.exit(); }); const main = (line) => { const DP = new Array(line + 1).fill(0); for (let i = 1; i
node.js로 푼 사람이 별로 없다는 게 참 슬픈 일이다. 자바스크립트로도 문제를 풀 수 있는데... 이 문제에서 주의할 것은 다음과 같다. ( 이 문제를 굳이 node.js로 검색했다면야... ) BigInt를 사용할 것. Cpp에서만 문제가 될 줄 알고 자만했는데, BigInt 때문에 틀린 것이었다. mod를 잊지 말 것. 나누라고 문제에 분명히 나와 있다. 혹시나 map 함수나 fill 등의 Array의 프로토타입 함수로 배열을 반환했다면, 모든 인덱스의 배열이 같은 배열을 가리키게 된다. 이 부분은 자바스크립트의 특성이므로 기억해두자. const readline = require("readline"); const rl = readline.createInterface({ input: process..