-
반응형
https://programmers.co.kr/learn/courses/30/lessons/12905
코딩테스트 연습 - 가장 큰 정사각형 찾기
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9
programmers.co.kr
풀이
풀이는 dp를 이용해서 문제를 해결했다.
해당칸이 1이라면, 자신의 좌, 좌상, 상 부분을 검사해준다. 이때 3구역중 가장 작은부분+1을 해준것이, 해당칸을 포함한 정사각형의 변이 된다.
시간복잡도
2차원배열을 독립적으로 두번만 탐색하면되므로, O(N2)이 된다.
코드
#include <iostream> #include<algorithm> using namespace std; int dp[1001][1001]={0}; int arr[1001][1001]={0}; int solution(vector<vector<int>> board) { int answer=0; int h=board.size(); int w=board[0].size(); for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ arr[i+1][j+1]=board[i][j]; } } for(int i=1;i<=h;i++){ for(int j=1;j<=w;j++){ if(arr[i][j]==1){ dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1; answer=max(answer,dp[i][j]); } } } return answer*answer; }
반응형'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 (0) 2021.11.19 [프로그래머스] 단속카메라 (0) 2021.11.01 [프로그래머스] 동물 수 구하기 (0) 2021.09.05 [프로그래머스] 징검다리 (0) 2021.09.03 [프로그래머스] 예상 대진표 (0) 2021.07.30 댓글