"(๋ฐฑ์ค/ C++) 1520 - ๋ด๋ฆฌ๋ง๊ธธ / ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ"
์ด๊ฑด DP ์ค ์ด๋ ค์ด ๋ฌธ์ ์ ์ํ๋๊ฒ ์๋๊ฑฐ ๊ฐ์๋ฐ ์๋ชป ์๊ฐํด์ ๊ณ์ ํ๋ ธ๋ค..
์ฒ์ ์๊ฐํ์ ๋ ๋์ ๊ณณ์์ ๋ฎ์ ๊ณณ์ผ๋ก ์ด๋ํ๋ค๊ณ ํด์ ์๋ก ↑ ๊ฐ ์ ์๋ค๊ณ ์๊ฐํ๋๋ฐ
๋์ ๊ณณ๊ณผ ๋ฎ์ ๊ณณ์ ๊ธฐ์ค์ ๋ฐฐ์ด ์์ ์ซ์์ง ๋ฐฐ์ด์ ์์น๋ฅผ ๋ฐ์ง๋ ๊ฒ์ด ์๋๋ค.
๊ทธ๋ผ ์ฆ → ์ฐ ↑ ์ ← ์ข ↓ ์๋ ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ๋ณด๋ฉด 0, 0 ๋ถํฐ M-1, N-1๊น์ง ์ค๋ ๊ฒฝ๋ก์๋ง 1์ ๋ฆฌํด ํด์ค๋ค.
๋๋ ๊ฑฐ๊พธ๋ก ์๊ฐํ๊ณ , ๋ชฉ์ ์ง ๋ถํฐ ์คํํธ ๊น์ง ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ๋ค. ์ฌ์ค ์ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ฒ๋ผ(?) ๋ฐ๋ณด๊ฐ์ด ๋ชจ๋ if๋ฌธ์ ๋๋์ง ๋ง๊ณ .. for๋ฌธ์ ์ด์ฉํ์.
๋ค๋ฅธ ์ฌ๋๋ค์ ๋ฌธ์ ํ์ด๋ฅผ ๋ณด๋ฉด ์ข,์ฐ,์,ํ ๋ชจ๋ ์ง์ ํด๋๊ณ ํ์ง๋ง ๋ ๋ํ๊ณ ๋บ๋ค ์ง์ ^^;;
int dy[4]={0,0,-1,1};
int dx[4]={-1,1,0,0};
#include <iostream>
#include <limits>
#include <algorithm>
using namespace std;
int gMatrix[501][501];
int m_row, m_col;
bool visit[501][501] = {false, };
int dp[501][501];
int Func(int x, int y)
{
if (y >= m_col || x >= m_row ||y < 0 || x < 0)
return 0;
if (x == 0 && y == 0)
{
return 1;
}
if (visit[x][y])
return dp[x][y];
visit[x][y] = true;
if (gMatrix[x][y] < gMatrix[x][y - 1])
{
dp[x][y] = dp[x][y] + Func(x, y - 1);
}
if (gMatrix[x][y] < gMatrix[x - 1][y])
{
dp[x][y] = dp[x][y] + Func(x - 1, y);
}
if (gMatrix[x][y] < gMatrix[x][y + 1])
{
dp[x][y] = dp[x][y] + Func(x, y+1);
}
if (gMatrix[x][y] < gMatrix[x + 1][y])
{
dp[x][y] = dp[x][y] + Func(x + 1, y);
}
return dp[x][y];
}
int main(void)
{
cin >> m_row >> m_col;
for (int i = 0; i < m_row; ++i)
{
for (int j = 0; j < m_col; ++j)
{
cin >> gMatrix[i][j];
}
}
cout << Func(m_row-1, m_col-1);
//cout << gCount;
return 0;
}
'๐ coding test > โฝ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!