기록하는 개발자

[프로그래머스][JAVA][알고리즘 문제 해결 강의] -4)가장 큰 정사각형 찾기 본문

Algorithm

[프로그래머스][JAVA][알고리즘 문제 해결 강의] -4)가장 큰 정사각형 찾기

밍맹030 2020. 2. 6. 00:03
728x90

문제 설명

1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)

 

예를 들어

0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

가 있다면 가장 큰 정사각형은

 

0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.

제한사항

  • 표(board)는 2차원 배열로 주어집니다.
  • 표(board)의 행(row)의 크기 : 1,000 이하의 자연수
  • 표(board)의 열(column)의 크기 : 1,000 이하의 자연수
  • 표(board)의 값은 1또는 0으로만 이루어져 있습니다.

728x90

위 그림처럼 a로부터 ,, 각각을 꼭지점으로 하는 가장 큰 정사각형을 골라 a를 포함시키면

그것이 가장 큰 정사각형이 될 것이다.(단, a는 0이 아님.)

왼쪽 board는 주어진 배열을 행렬로 나타낸 것이고

오른쪽 result는 board 배열을 통해 결과값 도출을 위해 사용되는 배열을 행렬로 나타낸 것이다.

result는 배열의 (1,1) 부터 수를 채워나가도록 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
public class Solution{
    int [][] result= new int[1001][1001];
    public int solution(int [][]board){
        int answer=0;
        int row=board.length;
        int col=board[0].length;
        for(int i=1; i<=row; ++i) {
            for(int j=1; j<=col; ++j) {
                if(board[i-1][j-1]!=0) {
                    result[i][j]=Math.min(result[i-1][j],
                            Math.min(result[i][j-1],result[i-1][j-1]))+1;
                    answer=Math.max(answer,result[i][j]);
                }
            }
        }
        return answer*answer;
    }
}http://colorscripter.com/info#e" target="_blank" s8tyle="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

https://blog.sonim1.com/212

 

배열에서 가장 큰 정사각형 찾기

배열에서 가장 큰 정사각형 찾기 프로그래머스에서 제공하는 문제 중 하나입니다. 배열 내부를 탐색하여 가장 큰 정사각형을 찾는 알고리즘입니다. 배열은 아래와 그림과 같이 제공되며 1이 정사각형일 때, 배열..

blog.sonim1.com

↘그림으로 자세한 설명을 해주셨다 참고하자!

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/12905
728x90