HyeLog

๋ฐฑ์ค€_11060_์ ํ”„ ์ ํ”„ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€_11060_์ ํ”„ ์ ํ”„

shj718 2022. 8. 2. 19:39

๐Ÿ™‹‍โ™€๏ธ ๋ฌธ์ œ

https://www.acmicpc.net/problem/11060

 

11060๋ฒˆ: ์ ํ”„ ์ ํ”„

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

www.acmicpc.net

 

๐Ÿงฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)

 

๐Ÿ’ก ์•„์ด๋””์–ด

D[i] = i๋ฒˆ ์นธ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ ํ”„ ํšŸ์ˆ˜

 

j๋ฒˆ์งธ ์นธ์—์„œ i๋ฒˆ์งธ ์นธ์œผ๋กœ ๊ฐˆ ๋•Œ(j < i), i - j ≤ Aj ์ž„

D[i] = min(D[j]) + 1

 

๐Ÿ‘ฉ‍๐Ÿ’ป ์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;

  int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    // input
    int n;
    cin >> n;
    vector<int> a(n);
    vector<int> d(n, -1);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    // dp
    d[0] = 0; // ์‹œ์ž‘์นธ
    for (int i = 0; i < n - 1; i++) { // ์•ž์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์นธ ๋‹ค ํ•ด๋ณด๊ธฐ
        if (d[i] == -1) continue; // ํ•ด๋‹น ์นธ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฉด ๋„˜์–ด๊ฐ
        for (int j = 1; j <= a[i]; j++) {
            if (i + j >= n) { // n๋ฒˆ์งธ ์นธ ๋„๋‹ฌ์‹œ ๋ฉˆ์ถค
                break;
            }
            if (d[i + j] == -1 || d[i + j] > d[i] + 1) { // i+j ๋ฒˆ ์นธ์œผ๋กœ ๊ฐ€๋Š” ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด๊ฑฐ๋‚˜ i๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€๋Š”๊ฒŒ ์ตœ์†Œ์ธ ๊ฒฝ์šฐ
                d[i + j] = d[i] + 1;
            }
        }
    }

    // output
    cout << d[n - 1] << '\n';
    return 0;
}