Programmers, ๋ณดํ–‰์ž ์ฒœ๊ตญ

2021. 12. 8. 17:07ใ†ETC/Algorithm

๋ฐ˜์‘ํ˜•

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

DP ๊ด€๋ จ ๋ฌธ์ œ! ์ด ๋ฌธ์ œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์—ฐ์Šต ๋ฌธ์ œ ์ค‘ ๋“ฑ๊ตฃ๊ธธ์™€ ๋น„์Šทํ–ˆ๋‹ค.

 

๋ฌธ์ œ ์„ค๋ช…

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

๋„์‹œ ์ค‘์‹ฌ๊ฐ€์˜ ์ง€๋„๋Š” m × n ํฌ๊ธฐ์˜ ๊ฒฉ์ž ๋ชจ์–‘ ๋ฐฐ์—ด city_map์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ž๋™์ฐจ๋Š” ์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์•„๋ž˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ ๊ฐ€๋Šฅํ•˜๋‹ค.

city_map[i][j]์—๋Š” ๋„๋กœ์˜ ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

  • 0์ธ ๊ฒฝ์šฐ์—๋Š” ์ž๋™์ฐจ๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • 1์ธ ๊ฒฝ์šฐ์—๋Š” ์ž๋™์ฐจ ํ†ตํ–‰์ด ๊ธˆ์ง€๋˜์–ด ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๋‹ค.
  • 2์ธ ๊ฒฝ์šฐ๋Š” ๋ณดํ–‰์ž ์•ˆ์ „์„ ์œ„ํ•ด ์ขŒํšŒ์ „์ด๋‚˜ ์šฐํšŒ์ „์ด ๊ธˆ์ง€๋œ๋‹ค. (์™ผ์ชฝ์—์„œ ์˜ค๋˜ ์ฐจ๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ, ์œ„์—์„œ ์˜ค๋˜ ์ฐจ๋Š” ์•„๋ž˜์ชฝ์œผ๋กœ๋งŒ ์ง„ํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค)

 

 

๋„์‹œ์˜ ๋„๋กœ ์ƒํƒœ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์™ผ์ชฝ ์œ„์˜ ์ถœ๋ฐœ์ ์—์„œ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๋„์ฐฉ์ ๊นŒ์ง€ ์ž๋™์ฐจ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ์ด๋•Œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ์˜ ์ˆ˜๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ 20170805๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ผ.

 

์ž…๋ ฅ ํ˜•์‹

์ž…๋ ฅ์€ ๋„์‹œ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” m๊ณผ n, ๊ทธ๋ฆฌ๊ณ  ์ง€๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 2์ฐจ์› ๋ฐฐ์—ด city_map์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ œํ•œ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • 1 <= m, n <= 500
  • city_map์˜ ํฌ๊ธฐ๋Š” m × n์ด๋‹ค.
  • ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์€ 0, 1, 2 ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • ์ถœ๋ฐœ์ ์˜ ์ขŒํ‘œ๋Š” (0, 0), ๋„์ฐฉ์ ์˜ ์ขŒํ‘œ๋Š” (m - 1, n - 1)์ด๋‹ค.
  • ์ถœ๋ฐœ์ ๊ณผ ๋„์ฐฉ์ ์˜ city_map[i][j] ๊ฐ’์€ 0์ด๋‹ค.

 

์ถœ๋ ฅ ํ˜•์‹

์ถœ๋ฐœ์ ์—์„œ ๋„์ฐฉ์ ๊นŒ์ง€ ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ๊ฒฝ๋กœ์˜ ์ˆ˜๋ฅผ 20170805๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

์˜ˆ์ œ ์ž…์ถœ๋ ฅ

m n city_map answer
3 3 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 6
3 6 [[0, 2, 0, 0, 0, 2], [0, 0, 2, 0, 1, 0], [1, 0, 0, 2, 2, 0]] 2

 

์˜ˆ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…

์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ๋Š” ๋ชจ๋“  ๋„๋กœ๊ฐ€ ์ œํ•œ ์—†์ด ํ†ตํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋กœ, ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 6๊ฐ€์ง€์ด๋‹ค.
๋‘ ๋ฒˆ์งธ ์˜ˆ์ œ๋Š” ๋ฌธ์ œ ์„ค๋ช…์— ์žˆ๋Š” ๊ทธ๋ฆผ์˜ ๊ฒฝ์šฐ์ด๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋นจ๊ฐ„ ์‹ค์„ ๊ณผ ๋…ธ๋ž€ ์ ์„  2๊ฐ€์ง€๋ฟ์ด๋‹ค.

 

 

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ

 

C++

#include <vector>
typedef unsigned long ul;
using namespace std;

int solution(int m, int n, vector<vector<int>> city_map) {
    vector<vector<vector<ul>>> pos(m+1, vector<vector<ul>>(n+1, vector<ul>(2)));
    pos[1][1][0] = pos[1][1][1] = 1;
    int MOD = 20170805;
    
    for (int y=1; y <= m; y++) {
        for (int x=1; x <= n; x++) {
            if (city_map[y-1][x-1] == 0) {
                pos[y][x][0] += (pos[y-1][x][0] + pos[y][x-1][1]) % MOD;
                pos[y][x][1] += (pos[y-1][x][0] + pos[y][x-1][1]) % MOD;
            } else if (city_map[y-1][x-1] == 1) pos[y][x][0] = pos[y][x][1] = 0;
            else {
                pos[y][x][0] = pos[y-1][x][0] % MOD;
                pos[y][x][1] = pos[y][x-1][1] % MOD;
            }
        }
    }
    return pos[m][n][0] % MOD;
}

 

๊ฐ€๋กœ ๋ฐฉํ–ฅ๊ณผ ์„ธ๋กœ ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๋Š” ํŒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค ~

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•