๋ฌธ์ :
๋ถ์ :
๋ํ์ ์ธ DP ๋ฌธ์ ๋ก 1์ฉ ๋ํ๋๊ฒ ๊ณง ์ ์ฌ๊ฐํ์ ํ ๋ณ์ด ๋๋ค๋ ๊ฒ ์ ๊ธฐํ๋ค. DP๊ฐ ์ ์ ํ๋ฒ ๊ณต๋ถํ์ ๋ ์ ์ดํด๊ฐ ์๋๋๋ฐ ์ด๋ฒ์ ์กฐ๊ธ ์๊ฑฐ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ฐ์ arr์ด๋ผ๋ ์๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ memo๋ผ๋ ๋ฐฐ์ด์ ๊ฐ์ ๊ณ์ฐํด ๋์ ํ๋ค.
arr[i-1][j-1], arr[i-1][j], arr[i][j-1] ๋ชจ๋๊ฐ 1์ผ๋๋ง์ด arr[i][j]๊ณผ ํจ๊ป ์ ์ฌ๊ฐํ์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ง ๊ฒ์ฌ ํ ๋ค 1์ ๋ํด ํ๋ณ์ memo ๋ฐฐ์ด์ ๋์ ํด ๋๊ณ ans์ ๊ฐ์ ๊ฐฑ์ ํ์ฌ ์ ์ฌ๊ฐํ์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ค.
c++ ์ฝ๋ :
//
// 1915_square.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/02/05.
//
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
int R1, R2;
int arr[1001][1001] = {0};
int memo[1001][1001] = {0};
string s;
int ans = 0;
void input(){
cin >> R1 >> R2;
for(int i = 0; i < R1; i++){
cin >> s;
for(int j = 0; j < R2; j++){
arr[i][j] = s[j] - 48;
if(arr[i][j] == 1){
memo[i][j] = 1;
ans = memo[i][j];
}
}
}
}
void find_biggest_square(){
for(int i = 1; i < R1; i++){
for(int j = 1; j < R2; j++){
if(arr[i-1][j-1] == 1 && arr[i-1][j] == 1 && arr[i][j-1] == 1){
memo[i][j] = min(memo[i-1][j-1], memo[i-1][j]);
memo[i][j] = min(memo[i][j], memo[i][j-1]) + 1;
}
ans = max(ans, memo[i][j]);
}
}
cout << ans * ans << endl;
}
int main (){
input();
find_biggest_square();
return 0;
}
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2252 ์ค์ธ์ฐ๊ธฐ (0) | 2021.02.14 |
---|---|
[๋ฐฑ์ค] 10828 stack (0) | 2021.02.06 |
[๋ฐฑ์ค] 1987 ์ํ๋ฒณ DFS (0) | 2021.02.05 |
[๋ฐฑ์ค] 2470 ๋์ฉ์ก ์ด๋ถํ์ (0) | 2021.02.05 |
[๋ฐฑ์ค] 2467 ์ฉ์ก ์ด๋ถํ์ (2) | 2021.02.05 |
๋๊ธ