[๋ฐฑ์ค/C++] 1937. ์์ฌ์์ด ํ๋ค
๋ฌธ์
1937๋ฒ: ์์ฌ์์ด ํ๋ค
n*n์ ํฌ๊ธฐ์ ๋๋๋ฌด ์ฒ์ด ์๋ค. ์์ฌ์์ด ํ๋ค๋ ์ด๋ค ์ง์ญ์์ ๋๋๋ฌด๋ฅผ ๋จน๊ธฐ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ณณ์ ๋๋๋ฌด๋ฅผ ๋ค ๋จน์ด ์น์ฐ๋ฉด ์, ํ, ์ข, ์ฐ ์ค ํ ๊ณณ์ผ๋ก ์ด๋์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๊ทธ๊ณณ์์
www.acmicpc.net
ํ์ด
์ ๋ฒ์ ํ์๋ ๋ด๋ฆฌ๋ง๊ธธ ๋ฌธ์ ์ ๋น์ทํ๊ฒ, DFS+DP ๋ฅผ ์ด์ฉํ๋ฉด ํ ์ ์๋ ๋ฌธ์ ์๋ค.
bba-dda.tistory.com/entry/%EB%B0%B1%EC%A4%80C-1520-%EB%82%B4%EB%A6%AC%EB%A7%89-%EA%B8%B8
[๋ฐฑ์ค/C++] 1520. ๋ด๋ฆฌ๋ง ๊ธธ
๋ฌธ์ www.acmicpc.net/problem/1520 1520๋ฒ: ๋ด๋ฆฌ๋ง ๊ธธ ์ฌํ์ ๋ ๋ ์ธ์ค์ด๋ ์ง๋๋ฅผ ํ๋ ๊ตฌํ์๋ค. ์ด ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์ ํ ์ง์ ์ ๋ํ๋ด
bba-dda.tistory.com
cache[i][j] : (i,j) ์์น์์ ์์ํ ๊ฒฝ์ฐ ํ๋ค๊ฐ ์ด ์ ์๋ ๋ ์ ์ต๋๊ฐ
์ฆ, DFS ํ์๊ณผ์ ์ค์, ์ด์ ์ ํ์ํ๋ ์ขํ์ ๋ค์ ๋๋ฌํ ๊ฒฝ์ฐ, ๋ค์ ํ์ํ์ง ์๊ณ cache๊ฐ์ ์ด์ฉํด์ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ์์๋ด๋ ๊ฒ์ด๋ค.
์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int forest[502][502] = { 0, };
int cache[502][502] = { 0, };
int dc[4] = { 0,0,-1,1 };
int dr[4] = { -1,1,0,0 };
int getMaxLiveDay(int i, int j) {
if (cache[i][j])
return cache[i][j];
cache[i][j] = 1;
for (int d = 0;d < 4;d++) {
int newC = j + dc[d];
int newR = i + dr[d];
if (forest[newR][newC] > forest[i][j]) {
cache[i][j] = max(cache[i][j], getMaxLiveDay(newR, newC)+1);
}
}
return cache[i][j];
}
int main(void) {
int n;
cin >> n;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= n;j++) {
cin >> forest[i][j];
}
}
int maxD = 0;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= n;j++) {
maxD = max(maxD, getMaxLiveDay(i, j));
}
}
cout << maxD;
return 0;
}