λ¬Έμ ν΄κ²° λ°©μ
μ°μ N,Mμ λ²μκ° 100μ΄νμ¬μ n^2μΌλ‘ νμμ΅λλ€.
DPλ¬Έμ λΌκ³ νλ¨νμ¬ ν μ΄λΈλ‘ κ°μ κ°±μ νλ©΄μ νμμ΅λλ€
(0,0)μμ μμν΄μ (N,M)κΉμ§ κ°λ μ΅λ¨κ±°λ¦¬μ΄κΈ° λλ¬Έμ
μ°μλ¨μ ν₯ν΄ κ°λ κ°λ€λ§ κ³ λ €νμ΅λλ€.
DP[i][j] = DP[i][j-1] + DP[i-1][j];
κ·Έμ€μμ κ³΅μ¬ μ€μΈ κΈΈμ μ μΈνκ³ κ°μ λν΄λκ°μ΅λλ€.
λ‘μ§ μμλ λ¬Έμ κ° μλ κ² κ°μλλ° μ μΆμ νμλ§μ λ€ ν리λλΌκ΅¬μ
μκ³ λ³΄λ κ²½λ‘λ₯Ό setμ μ μ₯ν λ ν€κ°μ λ¬Έμ μμ΅λλ€
μ²μμλ ${a}${b}${c}${d} μ΄λ° μμΌλ‘ ν€κ°μ 쀬μλλ°
ꡬλΆμ μμ΄ ν€κ°μ μ£Όλ a,b,c,dκ°μ΄ λ€λ¦μλ κ°μ κ°μΌλ‘ μΈμλμ΄μ νλ¦° κ² κ°μμ
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const [size, k, ...k_List] = require('fs')
.readFileSync(filePath)
.toString()
.trim()
.split('\n');
const [N, M] = size.split(' ').map(Number);
function solution(N, M, K_List) {
const DP = Array.from(new Array(N + 1), () => new Array(M + 1).fill(0n));
DP[0][0] = 1n;
const dr = [0, 1];
const dc = [1, 0];
const construction = new Set();
K_List.forEach(([a, b, c, d]) => {
if (a < c || b < d) construction.add(`${a},${b},${c},${d}`);
else construction.add(`${c},${d},${a},${b}`);
});
for (let i = 0; i <= N; i++) {
for (let j = 0; j <= M; j++) {
for (let k = 0; k < 2; k++) {
const prevR = i - dr[k];
const prevC = j - dc[k];
if (prevR >= 0 && prevC >= 0) {
if (!construction.has(`${prevR},${prevC},${i},${j}`)) {
DP[i][j] += DP[prevR][prevC];
}
}
}
}
}
return DP[N][M].toString();
}
const answer = solution(
N,
M,
k_List.map((k) => k.split(' ').map(Number)),
);
console.log(answer);
'π§ μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] λ§λ²μ μλ¦¬λ² μ΄ν° JS (0) | 2024.01.12 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] μ«μ λ³ννκΈ° JS (1) | 2024.01.11 |
[νλ‘κ·Έλλ¨Έμ€] νλ°° λ°°λ¬κ³Ό μκ±°νκΈ° JS (0) | 2024.01.10 |
[νλ‘κ·Έλλ¨Έμ€] μμ μ§κΏ JS (0) | 2024.01.09 |
[νλ‘κ·Έλλ¨Έμ€] λ€μ μλ ν° μ μ°ΎκΈ° JS (1) | 2024.01.07 |