[BOJ] 30464. ์‹œ๊ฐ„๋‚ญ๋น„ (๐Ÿฅ‡, ๊ทธ๋ž˜ํ”„ DP)

lemythe423ยท2024๋…„ 3์›” 22์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
133/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์€ ๋”ฑ 2๋ฒˆ ํšŒ์ „ํ•  ์ˆ˜ ์žˆ๊ณ , ์ฒ˜์Œ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ณ ์ •์ด๋‹ค. ์ฆ‰ ์˜ค๋ฅธ์ชฝ -> ์™ผ์ชฝ -> ๋‹ค์‹œ ์˜ค๋ฅธ์ชฝ, ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

์ฃผ์–ด์ง€๋Š” ์˜ˆ์ œ๋“ค์€ ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ๊ณ„์‚ฐํ•ด๋„ ์ œ๋Œ€๋กœ ๋œ ์ •๋‹ต์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ N์ด 20๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„์˜ˆ ์™„์ „ ํƒ์ƒ‰์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ DP๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋ชจ๋“  ์œ„์น˜์— ๋Œ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ์„ธ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ์˜ค๋ฅธ์ชฝ
  2. ํ•œ ๋ฒˆ ๋ฐฉํ–ฅ ๋ฐ”๊พผ ์™ผ์ชฝ
  3. ๋‘ ๋ฒˆ ๋ฐฉํ–ฅ ๋ฐ”๊ฟ”์„œ ๋‹ค์‹œ ์˜ค๋ฅธ์ชฝ

๋งŒ์•ฝ ์‹œ์ž‘ ์œ„์น˜ 1์— ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ๊นŒ์ง€๋Š” ๋ฐฉํ–ฅ์„ ํ•œ ๋ฒˆ๋„ ๋ฐ”๊พธ์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ๊ธฐํšŒ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๊ฒฐ๊ตญ ํ˜„์žฌ ๋ฐฉํ–ฅ์œผ๋กœ ์ง์ง„ํ•˜๊ฑฐ๋‚˜, ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์„œ ์ง์ง„ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

1๋ฒˆ์€ ํ˜„์žฌ ๋ฐฉํ–ฅ์œผ๋กœ์˜ ์ง์ง„, 2๋ฒˆ์€ ๋ฐฉํ–ฅ ๋ฐ”๊ฟ”์„œ ์ง์ง„์ด๋‹ค. ๊ฒฐ๊ตญ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€๋•Œ๋งˆ๋‹ค 1ํ–‰์”ฉ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋˜๊ณ , 1๋ฒˆ ํ–‰์—์„œ๋Š” ์ง์ง„์„ ํ•  ๋•Œ ํ˜„์žฌ ์œ„์น˜์—์„œ ์œ„์น˜๊ฐ’์„ ๋นผ์ฃผ๊ธฐ๋งŒํ•˜๋ฉด ๋œ๋‹ค.

2๋ฒˆ ํ–‰์— ๋„๋‹ฌํ•˜๊ฒŒ ๋˜๋ฉด ๋” ์ด์ƒ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ง์ง„๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฐ’์˜ ์ดˆ๊ธฐํ™” ๊ฐ’์„ Integer.MIN_VALUE๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ ๊ฐ™์€ ์œ„์น˜๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์œ„์น˜์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ์ค‘๋ณต๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๊ณณ์ด๋ผ๋ฉด ๋‘ ๋ฒˆ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ฒ˜์Œ ์ดˆ๊ธฐํ™” ๊ฐ’์€ -1๋กœ ์„ค์ •ํ•˜๊ณ , ๋งŒ์•ฝ ํ•ด๋‹น ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ–ˆ๋Š”๋ฐ ๊ฐ’์ด -1์ด ์•„๋‹ˆ๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜์‹œํ‚ค๋ฉด ๋œ๋‹ค. ์ด๋•Œ ์ดˆ๊ธฐํ™” ๊ฐ’์€ Integer.MIN_VALUE๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ด ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ ์ด ๊ฐ’์„ ํ˜„์žฌ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ธฐ์ค€๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†๋Š” ๊ฒƒ๊ณผ ํ•ด๋‹น ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋Š” ๊ฒƒ์ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์—... ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฆ‰ ์ด ๋…ธ๋“œ์—๋Š” ํ•œ ๋ฒˆ๋„ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†์–ด์š”~๋ผ๋Š” ๋œป๊ณผ ์ด ๋…ธ๋“œ ๋ฐฉ๋ฌธํ•ด๋ดค๋”๋‹ˆ ๋ฐฉ๋ฌธํ•  ๋ฐฉ๋ฒ•์ด ์—†๋”๋ผ๋Š” ๋ฐฉ๋ฌธํ•œ๊ฒƒ๋„ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ๋„ ์•„๋‹Œ ์ถฉ๋Œ์ด ์ƒ๊ธด๋‹ค๋Š” ๋œป.

๊ทธ๋ž˜์„œ ์ดˆ๊ธฐํ™” ๊ฐ’์€ -1๋กœ ๋”ฐ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹๋‹ค.

import java.util.*;
import java.io.*;

public class Main {
    static int[] pos;
    static int N;
    static int[][] dp;
    
    public static int f(int cur, int u) {
        if (cur < 0 || cur >= N) return Integer.MIN_VALUE;
        if (cur == N-1) return 0;
        if (dp[cur][u] != -1) return dp[cur][u];
        
        dp[cur][u] = Integer.MIN_VALUE;
        if (u == 0) {
            dp[cur][u] = Math.max(f(cur + pos[cur], u), f(cur - pos[cur], u+1)) + 1;
        } else if (u == 1) {
            dp[cur][u] = Math.max(f(cur - pos[cur], u), f(cur + pos[cur], u+1)) + 1;
        } else {
            dp[cur][u] = f(cur + pos[cur], u) + 1;
        }

        return dp[cur][u];
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        pos = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            pos[i] = Integer.parseInt(st.nextToken());
        }
        
        dp = new int[N][3];
        for (int i = 0; i < N; i++) {
            Arrays.fill(dp[i], -1);
        }

        // dp[0][0] = 0;
        int answer = f(0, 0);
        System.out.println(answer > 0 ? answer : -1);
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€