[BOJ][C++] ๋ฐฑ์ค€ 1890๋ฒˆ: ์ ํ”„

2025. 4. 23. 17:24ยท๐Ÿ’ญ Problem Solving/C++

๋ฌธ์ œ

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

 

๋ฌธ์ œ ์ดํ•ด

์ˆ˜๊ฐ€ ์ ํ˜€ ์žˆ๋Š” N×N ๊ฒŒ์ž„ํŒ์—์„œ ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์นธ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์œผ๋กœ ๊ทœ์น™์— ๋”ฐ๋ผ ์ ํ”„ํ•œ๋‹ค.

๊ทœ์น™์— ๋งž๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

๊ทœ์น™

  1. ๊ฐ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” ํ˜„์žฌ ์นธ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  2. 0์€ ์ข…์ฐฉ์ ์„ ์˜๋ฏธํ•œ๋‹ค.
  3. ํ˜„์žฌ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋งŒํผ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅํ•˜๋‹ค.
  4. ํ•œ ๋ฒˆ ์ ํ”„ํ•  ๋•Œ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋˜๋Š” ์•„๋ž˜๋กœ ์ ํ”„๋ฅผ ํ•˜๋Š” ๋‘ ๊ฒฝ์šฐ๋งŒ ์กด์žฌํ•œ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

๐Ÿ” ์ ‘๊ทผ

๊ฐ ์นธ๋งˆ๋‹ค ํ˜„์žฌ ์นธ๊นŒ์ง€์˜ ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

๐Ÿ’ก Dynamic Programming

์นธ์— ์ ํžŒ ์ˆ˜๋งŒํผ ์ด๋™ํ•ด์„œ ํ•ด๋‹น ์นธ๊นŒ์ง€์˜ ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ์นธ(๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜ 1)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  • ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ ํ”„ํ•œ๋‹ค:
    ๋‹ค์Œ ์—ด = j + v[i][j]
    dp[i][๋‹ค์Œ ์—ด] += dp[i][j](์ด์ „ ์นธ๊นŒ์ง€์˜ ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜)

  • ์•„๋ž˜๋กœ ์ ํ”„ํ•œ๋‹ค:
    ๋‹ค์Œ ํ–‰ = i + v[i][j]
    dp[๋‹ค์Œ ํ–‰][j] += dp[i][j]

 

๐Ÿšจ

  • ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜์˜ ๋ฒ”์œ„(<=2^63-1)๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ž๋ฃŒํ˜•(long long)์„ ์„ค์ •ํ•œ๋‹ค.
  • ์ธ๋ฑ์Šค๊ฐ€ ๊ฒŒ์ž„ํŒ ๋ฒ”์œ„๋ฅผ ๋„˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. (< n)
  • ๋งˆ์ง€๋ง‰ ์นธ์—์„œ ๊ฒฝ๋กœ๊ฐ€ ์ค‘๋ณต ๊ณ„์‚ฐ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. (dp[i][j] += dp[i][j] ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ)

 

์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;
using ll = long long;

ll countRoute(int n, vector<vector<int>> &v)
{
    vector<vector<ll>> dp(n, vector<ll>(n, 0));
    
    dp[0][0] = 1;
    
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (!v[i][j])
                continue;
                
            int nr = i + v[i][j];
            int nc = j + v[i][j];
            
            if (nc < n)
                dp[i][nc] += dp[i][j];
            if (nr < n)
                dp[nr][j] += dp[i][j];
        }
    }

    return dp[n - 1][n - 1];
}

int main()
{
    int n;
    vector<vector<int>> v;
    
    cin >> n;
    v.assign(n, vector<int>(n, 0));
    
    for(int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            cin >> v[i][j];
            
    cout << countRoute(n, v);

    return 0;
}

'๐Ÿ’ญ Problem Solving > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ][C++] ๋ฐฑ์ค€ 2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค  (0) 2025.05.13
[BOJ][C++] ๋ฐฑ์ค€ 1303๋ฒˆ: ์ „์Ÿ - ์ „ํˆฌ  (0) 2025.04.23
[BOJ][C++] ๋ฐฑ์ค€ 2579๋ฒˆ: ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ  (0) 2025.04.23
[BOJ][C++] ๋ฐฑ์ค€ 1260๋ฒˆ: DFS์™€ BFS  (0) 2025.04.23
[BOJ][C++] ๋ฐฑ์ค€ 2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ  (0) 2024.11.11
'๐Ÿ’ญ Problem Solving/C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ][C++] ๋ฐฑ์ค€ 2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค
  • [BOJ][C++] ๋ฐฑ์ค€ 1303๋ฒˆ: ์ „์Ÿ - ์ „ํˆฌ
  • [BOJ][C++] ๋ฐฑ์ค€ 2579๋ฒˆ: ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ
  • [BOJ][C++] ๋ฐฑ์ค€ 1260๋ฒˆ: DFS์™€ BFS
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (42)
        • C++ (28)
        • Java (14)
      • ๐Ÿ“ Study (17)
        • React (1)
        • Java (16)
      • ๐Ÿ’ป CS (11)
        • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ (2)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ •๋ ฌ
    ๋งต
    makefile
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    dfs
    C
    react
    CS
    VR
    ๋ฐฑํŠธ๋ž˜ํ‚น
    knapsack
    ๋ฐฑ์ค€
    BFS
    git
    github
    unity
    42๊ฒฝ์‚ฐ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    .h
    HTML
    dynamic programming
    La Piscine
    ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ
    java
    swea
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    ๊ตฌํ˜„
    CSS
    ํŠธ๋ฆฌ
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[BOJ][C++] ๋ฐฑ์ค€ 1890๋ฒˆ: ์ ํ”„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”