1 분 소요

1. 문제

[level 2] 가장 큰 정사각형 찾기 - 12905

문제 링크

성능 요약

메모리: 38.7 MB, 시간: 380.09 ms

구분

코딩테스트 연습 > 연습문제

채점결과


정확성: 59.6
효율성: 40.4
합계: 100.0 / 100.0

문제 설명

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

예를 들어

1 2 3 4
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

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

1 2 3 4
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으로만 이루어져 있습니다.

입출력 예
board answer
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9
[[0,0,1,1],[1,1,1,1]] 4
입출력 예 설명

입출력 예 #1
위의 예시와 같습니다.

입출력 예 #2
| 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 |
로 가장 큰 정사각형의 넓이는 4가 되므로 4를 return합니다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

2. 해결방법 시간복잡도

  1. DP O(N^2)

3. 문제 해결 및 코드


  • 주석을 참고하면서 이해를 돕습니다.

4. 알고리즘 및 해설

  1. 문제에서 제시한 보드를 만들어준다.
    • 이때 보드의 크기만큼 1차원 행렬의 숫자와 0으로 가득찬 다차원 행렬을 만든다.
    • 맨 윗 행렬을 문제에서 제시한 보드의 첫번째 행렬로 변경해준다.
  2. 이후 반복문을 통해 행렬의 첫번째 값들을 모두 변경해준다.
  3. 이중 반복문을 통해 1부터 보드의 크기만큼 돌아가되, 이때 j라는 값을 기준으로 보드 내부의 행렬만큼 돌린다.
    • 이때 만약 보드의 위치가 1이라면 dp 위치에서 만들 수 있는 가장 큰 사각형을 계산해준다.
  4. 이후 다시 반복문을 통해 tmp라는 변수를 만들어 DP로 계산한 가장 큰 값을 도출해준다.
    • 이때 answer이라는 변수도 만들어 정답과 비교해서 더 큰 값을 계산해준다.
  5. 최종적으로 결과값에 제곱을 해서 정사각형의 넓이를 출력한다.