๋ฌธ์
๋ฌธ์
์ฌํ์ ๋ ๋ ์ธ์ค์ด๋ ์ง๋๋ฅผ ํ๋ ๊ตฌํ์๋ค. ์ด ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์ ํ ์ง์ ์ ๋ํ๋ด๋๋ฐ ๊ฐ ์นธ์๋ ๊ทธ ์ง์ ์ ๋์ด๊ฐ ์ฐ์ฌ ์์ผ๋ฉฐ, ๊ฐ ์ง์ ์ฌ์ด์ ์ด๋์ ์ง๋์์ ์ํ์ข์ฐ ์ด์ํ ๊ณณ๋ผ๋ฆฌ๋ง ๊ฐ๋ฅํ๋ค.
ํ์ฌ ์ ์ผ ์ผ์ชฝ ์ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ ์๋ ์ธ์ค์ด๋ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ผ๋ก ๊ฐ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ๋ฅํ ํ์ ์ ๊ฒ ๋ค์ด๊ณ ์ถ์ด ํญ์ ๋์ด๊ฐ ๋ ๋ฎ์ ์ง์ ์ผ๋ก๋ง ์ด๋ํ์ฌ ๋ชฉํ ์ง์ ๊น์ง ๊ฐ๊ณ ์ ํ๋ค. ์์ ๊ฐ์ ์ง๋์์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ๊ฒฝ๋ก๊ฐ ๊ฐ๋ฅํ๋ค.
์ง๋๊ฐ ์ฃผ์ด์ง ๋ ์ด์ ๊ฐ์ด ์ ์ผ ์ผ์ชฝ ์ ์ง์ ์์ ์ถ๋ฐํ์ฌ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์ง์ ๊น์ง ํญ์ ๋ด๋ฆฌ๋ง๊ธธ๋ก๋ง ์ด๋ํ๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ง๋์ ์ธ๋ก์ ํฌ๊ธฐ M๊ณผ ๊ฐ๋ก์ ํฌ๊ธฐ N์ด ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ์ด์ด ๋ค์ M๊ฐ ์ค์ ๊ฑธ์ณ ํ ์ค์ N๊ฐ์ฉ ์์์๋ถํฐ ์ฐจ๋ก๋ก ๊ฐ ์ง์ ์ ๋์ด๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. M๊ณผ N์ ๊ฐ๊ฐ 500์ดํ์ ์์ฐ์์ด๊ณ , ๊ฐ ์ง์ ์ ๋์ด๋ 10000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์ H๋ฅผ ์ถ๋ ฅํ๋ค. ๋ชจ๋ ์ ๋ ฅ์ ๋ํ์ฌ H๋ 10์ต ์ดํ์ ์์ด ์๋ ์ ์์ด๋ค.
ํ์ด๊ณผ์
1.๊ท์น
- dp์ด๋ฏ๋ก ์ ํ์๊ณผ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํฉ๋๋ค.
- ์ผ์ชฝ ์ (1,1)์์ ์ถ๋ฐํ์ฌ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋(M,N) ๊น์ง ํญ์ ๋ด๋ฆฌ๋ง๊ธธ๋ก๋ง ์ด๋ํ๋ ๊ฒฝ๋ก์ ๊ฐฏ์๋ฅผ ๊ตฌํฉ๋๋ค.
- ์ ๋ ฅ์ 10์ต ์ดํ์ ์์ด ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋๋ค.
- ์ธ์ค์ด๋ M,N์์์๋ง ์์ง์ผ ์ ์์ต๋๋ค.
2.์์
๋จผ์ , ์ ๋ ฅ์ 10์ต ์ดํ์ ์์ด ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ฏ๋ก -2,147,483,648 ~2.147.483.647์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ int๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ์๋ฃํ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ธ์ค์ด๊ฐ dp[i][j] ์ง์ ์ ์์๋, ์ด๋ํ ์ ์๋ ๋ฐฉํฅ์ ์, ํ, ์ข, ์ฐ ์ ๋๋ค.
์ฆ, ์ขํ๋ก ํํํด ๋ณด๋ฉด
์ด๋ฏ๋ก, ํด๋น ์ขํ๋ฅผ 2์ฐจ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ์ด๊ธฐํ ํด๋์ต๋๋ค.
int dir[4][2] = { {-1,0},{1,0},{0,-1},{0,1} };
์ดํ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์ฌ ํ์ฌ ( i , j )์ขํ๊ฐ ์,ํ,์ข,์ฐ๋ก ์ด๋ํ ์ ์๋์ง ์ฒดํฌํ๊ณ
( M , N )๊น์ง ๋์ฐฉํ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์์ ๋ ๋ง๋ค, dp[i][j]๋ฅผ 1์ฉ ์ฆ๊ฐํด์ฃผ๋ฉด ์ ๋ต์ด ๋์ค๊ฒ ๋ฉ๋๋ค.
์๋ฅผ๋ค์ด,
map[1][1]=50 ์์ ์ด๋ํ ์ ์๋ ๋ฐฉํฅ์ 45(์ค๋ฅธ์ชฝ), 35(์๋ซ์ชฝ)์ ๋๋ค.
์๋ซ์ชฝ๋ถํฐ ์งํํ์๋ map[2][1]=35์์ ๋ํ๋ฒ ์,ํ,์ข,์ฐ๋ก ์ด๋ํ ์ ์๋ ๋ฐฉํฅ์ ์ฒดํฌํ๊ณ
35๋ณด๋ค ๊ฐ์ด ์์ ์๋ซ์ชฝ map[3][1]=30์ผ๋ก ์ด๋ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก map[3][1]์์๋ ์ฌ๊ทํจ์๋ก ๊ณ์ ์,ํ,์ข,์ฐ๋ฅผ ์ฒดํฌํ๋ฉฐ 27, 24, 22, 15 ๊น์ง ์ด๋ํ๋ค๊ฐ,
๋ง์ง๋ง์นธ์ธ map[4][5]=10 ์ ๋์ฐฉํ๋ค๋ฉด 1์ ๋ฆฌํดํ๋ฉฐ dp[i][j]์ 1์ ์ฆ๊ฐํด์ฃผ๊ฒ ๋ฉ๋๋ค.
์ดํ map[1][1]=50์ ์ค๋ฅธ์ชฝ์ธ map[1][2]=45๋ ๋ง์ ์งํํ๋ฉด dp[i][j]๋ ์ ๋ต์ธ 3์ด ๋ฉ๋๋ค.
๋ฐ๋ผ์, ์ ํ์์
(new_i, new_j๋ ์,ํ,์ข,์ฐ ์ขํ {-1,0},{1,0},{0,-1},{0,1})
if(new_i >= 1 && new_i <= M && new_j >= 1 && new_j <= N)
if(map[i][j] > map[new_i][new_j])
d[i][j] += ์ฌ๊ทํจ์(new_i, new_j)
๊ฐ ๋ฉ๋๋ค.
3.์ฝ๋
'๐ค PS(Problem Solving) > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/c++] 11049๋ฒ - ํ๋ ฌ ๊ณฑ์ ์์ (0) | 2019.08.17 |
---|---|
[๋ฐฑ์ค/c++] 11066๋ฒ - ํ์ผ ํฉ์น๊ธฐ (0) | 2019.08.17 |
[๋ฐฑ์ค/c++] 2294๋ฒ - ๋์ 2 (0) | 2019.08.11 |
[๋ฐฑ์ค/c++] 2293๋ฒ - ๋์ 1 (0) | 2019.08.11 |
[๋ฐฑ์ค/c++] 1509๋ฒ - ํฐ๋ฆฐ๋๋กฌ ๋ถํ (0) | 2019.08.09 |