Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฐฑ์ค€ 15992 1, 2, 3 ๋”ํ•˜๊ธฐ 7

Ama_grammer 2025. 2. 20. 14:48

๐Ÿ“–๋ฌธ์ œ

1, 2, 3 ๋”ํ•˜๊ธฐ 7

โ“๊ตฌ์ƒ

์ด ๋ฌธ์ œ๋Š” "1, 2, 3 ๋”ํ•˜๊ธฐ" ๋ฌธ์ œ ์‹œ๋ฆฌ์ฆˆ์ค‘ 7๋ฒˆ์งธ ๋ฌธ์ œ๋‹ค. ์•ž์„œ ํ’€์–ด๋ณธ "1, 2, 3 ๋”ํ•˜๊ธฐ" ๋ฌธ์ œ๋Š” ๋ชจ๋‘ Dynamic Programming ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์ด์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋น„์Šทํ•˜๊ฒŒ ์ ‘๊ทผ์„ ํ•ด๋ณด๋ คํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์—ฌํƒœ ํ’€์–ด๋ณธ DP ๋ฌธ์ œ๋Š” ํ”ผ๋ณด๋‚˜์น˜์ˆ˜์—ด์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ N๋ฒˆ์งธ์˜ DP ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋Š”๋ฐ ์ด ๋ฌธ์ œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๊ทธ ์•„๋ž˜๋กœ T๊ฐœ์˜ n, m ์˜ ์Œ์ด ์žˆ๋‹ค. ์ฆ‰, ์—ฌํƒœ ํ’€์–ด๋ณธ DP ๋ฌธ์ œ๋Š” n ๊ณผ m ์ด ์ฃผ์–ด์ง€๋Š”๊ฒŒ ์•„๋‹Œ n ์ด ์ฃผ์–ด์ ธ์„œ n๋ฒˆ์งธ DP ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” 1, 2 ,3 ์„ ์ด์šฉํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” n์˜ ๊ฐฏ์ˆ˜ + 1, 2, 3 ์ˆซ์ž m ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์„œ n์ด ๋˜๋„๋ก ํ•˜๋Š” ๋ฌธ์ œ์ธ๊ฒƒ์ด๋‹ค. ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๋ฉด ์ข‹์„์ง€ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ๋ฌธ๋œฉ ์˜›๋‚ ์— DP ์˜ ํŒจํ„ด์„ ์ข€๋” ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ Chat GPT ์—๊ฒŒ ๋ฌผ์–ด๋ณธ ๊ฒฐ๊ณผ ํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค๋งˆ๋‹ค ์–ด๋–ค ๊ฐ’์„ ๊ฐ–๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•ด์„œ ๊ทธ ๊ฐ’์„ ๋น„๊ตํ•ด ํŒจํ„ด์„ ํŒŒ์•…ํ•œ ํ›„ ์ ํ™”์‹์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ๋‚ฌ๋‹ค. ์ด๊ฒƒ์„ ํ™œ์šฉํ•ด ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค๋งˆ๋‹ค ์–ด๋–ค ๊ฐ’์„ ๊ฐ–๋Š”์ง€ ํ‘œ๋กœ ๋จผ์ € ์ž‘์„ฑํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

ํŒจํ„ดํŒŒ์•…์„ ์œ„ํ•œ ํ‘œ ์ž‘์„ฑ

N \ M 1 2 3 4 5 6 7 8 9 10
1 1 0 0 0 0 0 0 0 0 0
2 1 1 0 0 0 0 0 0 0 0
3 1 2 1 0 0 0 0 0 0 0
4 0 3 3 1 0 0 0 0 0 0
5 0 2 6 4 1 0 0 0 0 0
6 0 1 7 10 5 1 0 0 0 0
7 0 0 6 16 15 6 1 0 0 0
8 0 0 3 19 30 21 7 1 0 0
9 0 0 1 16 45 50 28 8 1 0
10 0 0 0 10 30 90 77 36 9 1

 

ํ‘œ๋กœ ์ž‘์„ฑํ•ด์„œ ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค ๋ณ„ ๊ฐ’์„ ์ •๋ฆฌํ•œ ๊ฒฐ๊ณผ

  1. N ๊ณผ M ์ด ๊ฐ™์€ ๊ฒฝ์šฐ → 1๊ฐœ ( N = 2, M = 2 → 1, 1 ์˜ ์กฐํ•ฉ๋งŒ ๊ฐ€๋Šฅ)
  2. N ์ด 4๋ณด๋‹ค ์ž‘๊ณ  M ์ด 1์ธ ๊ฒฝ์šฐ → 1๊ฐœ (1, 2, 3 ์˜ ์กฐํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ)
  3. N ์ด 3 ์ธ ๊ฒฝ์šฐ N - 1 ์˜์—ญ์—์„œ M - 1, M - 2 ์นธ์˜ ํ•ฉ์ด N, M ์˜ ๊ฐ’์ด ๋จ
  4. M ์ด 1๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ N - 1 ์˜์—ญ์—์„œ M - 1, M - 2, M - 3 ์นธ์˜ ํ•ฉ์€ N, M ์˜ ๊ฐ’์ด ๋จ

์œ„ 4๊ฐœ์˜ ์กฐ๊ฑด์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

์ฝ”๋“œ.

const [T, ...arr] = require('fs').readFileSync('./input.txt', 'utf-8').trim().split('\n');
const nums = arr.map(e => e.split(' ').map(Number));
const maxN = [...nums].sort((a, b) => b[0] - a[0])[0][0];
// N ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ตฌํ•˜์—ฌ maxN ์— ํ• ๋‹น
const maxM = [...nums].sort((a, b) => b[1] - a[1])[0][1];
// M ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ตฌํ•˜์—ฌ maxM ์— ํ• ๋‹น
const dp = Array.from({ length: maxN }, () => new Array(maxM).fill(0n));
const DIV_NUM = 1000000009n;
const solution = (n, m) => {
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < m; j++) {
      if (i === j) {
        dp[i][j] = 1n;
        break;
      }
      else if (i < 3 && j === 0) dp[i][j] = 1n;
      else if (i === 2) dp[i][j] = (dp[i - 1][j - 1] + dp[i - 2][j - 1]) % DIV_NUM;
      else if (j > 0) dp[i][j] = (dp[i - 1][j - 1] + dp[i - 2][j - 1] + dp[i - 3][j - 1]) % DIV_NUM;
    }
  }
}
solution(maxN, maxM);
const result = new Array(+T);
nums.forEach((e, i) => result[i] = dp[e[0] - 1][e[1] - 1]);
console.log(result.join('\n'));

 

๋ฐฑ์ค€ ์˜ˆ์ œ ์ž…๋ ฅ 1์„ ๊ธฐ์ค€์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด T ๊ฐ€ 3 ์ฆ‰, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ 3๊ฐœ ์žˆ๊ณ  ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค๋Š” ์‚ฌ๋กœ ๋‹ค๋ฅธ(๊ฐ™์€ ๊ฐ’์ด ์กด์žฌํ• ์ˆ˜๋Š” ์žˆ์Œ)

n ๊ณผ m ์„ ๊ฐ–๋Š”๋‹ค. ๋‹จ์ˆœํžˆ ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค๋ฅผ solution ํ•จ์ˆ˜์— ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์คŒ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค์—์„œ n๊ณผ m ์˜ ๊ฐ๊ฐ์˜ ์ตœ๋Œ“๊ฐ’์„ maxN, maxM ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ทธ ๊ฐ’์œผ๋กœ dp (maxN * maxM ๊ณต๊ฐ„์„ ๊ฐ–๊ณ , 0์ด ํ• ๋‹น๋˜์–ด์žˆ๋Š” ๋ฐฐ์—ด) ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์ฃผ๊ณ  solution ํ•จ์ˆ˜์— maxN, maxM ์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

์ถœ๋ ฅ

์œ„์˜ ์ฝ”๋“œ๋กœ ์ฃผ์–ด์ง„ ์ผ€์ด์Šค (4, 2), (7, 5), (10, 6) ์ผ๋•Œ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜์žˆ๋‹ค.

4 2 → 3
7 5 → 15
10 6 → 90

 

๐Ÿ”ฅ๋ฐฐ์šด ์ 

์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด์„œ ์ด์ „์—๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ DP ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์™€ ๊ฐ™์ด ๋‹จ์ˆœํ•œ DP ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฒ•์— ์ต์ˆ™ํ•ด ๋ชจ๋“  DP ๋ฌธ์ œ ์ ‘๊ทผ๋ฒ•์„ ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์ ‘๊ทผํ–ˆ๋Š”๋ฐ 2์ฐจ์› ๋ฐฐ์—ด์„ ํ™œ์šฉํ•˜๋ฉด์„œ ์ข€๋” ์‘์šฉ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์ข€ ๋” ๋‹ค์–‘ํ•œ ์ ‘๊ทผ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ if ์กฐ๊ฑด๋ฌธ ๋ถ„๊ธฐ๋ฅผ ๋งŽ์ด ์ƒ์šฉํ•ด์„œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ DP๋กœ ํ•ด๊ฒฐํ• ๋•Œ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ–ˆ๋“ฏ ์ด ๋ฌธ์ œ์—๋„ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ์„ค์ •ํ•ด ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰ํ•ด ๊ฐœ์„ ์„ ํ•ด๋ด์•ผํ• ๊ฑฐ ๊ฐ™๋‹ค.