Hello Ocean! ๐ŸŒผ

[๋ฐฑ์ค€/C++] 1937. ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค ๋ณธ๋ฌธ

Algorithm

[๋ฐฑ์ค€/C++] 1937. ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค

bba_dda 2021. 4. 6. 20:10
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

www.acmicpc.net/problem/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;
}

 

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•