Algorithm

[Algorithm] ์ ํ”„ ์ ํ”„ (๋ฐฑ์ค€ - 11060)

ghkdu2 2023. 5. 2. 21:35

๐Ÿ“‹ ๋ฌธ์ œ

์žฌํ™˜์ด๊ฐ€ 1×N ํฌ๊ธฐ์˜ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜€์žˆ๋‹ค. ๋ฏธ๋กœ๋Š” 1×1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ ์นธ์—๋Š” ์ •์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์“ฐ์—ฌ ์žˆ๋‹ค. i๋ฒˆ์งธ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋ฅผ Ai๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์žฌํ™˜์ด๋Š” Ai์ดํ•˜๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋–จ์–ด์ง„ ์นธ์œผ๋กœ ํ•œ ๋ฒˆ์— ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 3๋ฒˆ์งธ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ 3์ด๋ฉด, ์žฌํ™˜์ด๋Š” 4, 5, 6๋ฒˆ ์นธ ์ค‘ ํ•˜๋‚˜๋กœ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฌํ™˜์ด๋Š” ์ง€๊ธˆ ๋ฏธ๋กœ์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ๋์— ์žˆ๊ณ , ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋์œผ๋กœ ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ, ์ตœ์†Œ ๋ช‡ ๋ฒˆ ์ ํ”„๋ฅผ ํ•ด์•ผ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋งŒ์•ฝ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋์œผ๋กœ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ

  • ์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” Ai (0 ≤ Ai ≤ 100)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

  • ์žฌํ™˜์ด๊ฐ€ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ์ ํ”„๋ฅผ ํ•ด์•ผ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋ ์นธ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋์œผ๋กœ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ ์ž…๋ ฅ ์˜ˆ์ œ ์ถœ๋ ฅ
10
1 2 0 1 3 2 1 5 4 2
5

โœ๏ธ ํ’€์ด

์ด ๋ฌธ์ œ๋Š” ํ’€์ด๋ฐฉ๋ฒ•์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค. ์ฒซ๋ฒˆ์งธ๋Š” DP์ด๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” BFS์ด๋‹ค. ๋‚˜๋Š” DP๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.

 

๋ฌธ์ œ ์„ค๋ช…์ด ์‚ด์ง ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ฝ์–ด๋ณด๋‹ˆ ์ดํ•ด๊ฐ€ ์ž˜ ๋ฌ๋‹ค.(ํ™•์‹คํ•˜๊ฒŒ ์ฝ์ž!!) ํ—ท๊ฐˆ๋ ธ๋˜ ์ ์ด ํ˜„์žฌ ์œ„์น˜์—์„œ ์–ผ๋งˆ๋‚˜ ์ ํ”„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€์˜€๋‹ค. ๋ฌธ์ œ์— "์žฌํ™˜์ด๋Š” Ai์ดํ•˜๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋–จ์–ด์ง„ ์นธ์œผ๋กœ ํ•œ ๋ฒˆ์— ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค." ๋ผ๋Š” ์ง€๋ฌธ์ด ์žˆ๋Š”๋ฐ ์ด๊ฒŒ ํ•ต์‹ฌ ํฌ์ธํŠธ์˜€๋‹ค. ๋งŒ์•ฝ ์ฒซ ๋ฒˆ์งธ ๋ฏธ๋กœ์— ์œ„์น˜ํ•ด ์žˆ๋‹ค๋ฉด A ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜ ์ดํ•˜๋งŒํผ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DP ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

DP[i] = i ๋ฒˆ์งธ ๋ฏธ๋กœ๊นŒ์ง€ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ ํ”„ ํšŸ์ˆ˜

๋”ฐ๋ผ์„œ ํ˜„์žฌ ์œ„์น˜์—์„œ A ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜ ์ดํ•˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋ฉฐ ์ตœ์†Œ๊ฐ’์„ ๊ฐฑ์‹ ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค. ์ฒ˜์Œ DP ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋Š”  ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Infinity๋กœ ์ดˆ๊ธฐํ™”ํ•ด์คฌ๋‹ค. ์ดˆ๊ธฐ ์œ„์น˜(1๋ฒˆ์งธ)๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.

 

๋งŒ์•ฝ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค๋ฉด ์ปค์ง€๋Š” ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— breakํ•ด์„œ ๋” ์ด์ƒ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Math.min ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์˜ ์ ํ”„ ํšŸ์ˆ˜๊ฐ’์„ ๊ฐฑ์‹ ํ–ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์ œ์ผ ๋ ์œ„์น˜(N)๊ฐ€ Infinity๋ผ๋ฉด ๊ฐˆ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ -1์„ ์ถœ๋ ฅํ•˜๊ณ  ์•„๋‹ˆ๋ผ๋ฉด DP[N]์„ ์ถœ๋ ฅํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

โŒจ๏ธ ์ฝ”๋“œ

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './testcase/11060.txt';

let input = fs.readFileSync(filePath).toString().trim().split('\n');

const N = +input[0];
const arr = input[1].split(' ').map(Number);

const dp = new Array(N + 1).fill(Infinity);
dp[1] = 0;

for (let pos = 1; pos <= N; pos++) {
  for (let dist = 1; dist <= arr[pos - 1]; dist++) {
    if (pos + dist > N) break;
    dp[pos + dist] = Math.min(dp[pos + dist], dp[pos] + 1);
  }
}

console.log(dp[N] !== Infinity ? dp[N] : -1);