삐주
초급 개발자
삐주
전체 방문자
오늘
어제
  • 분류 전체보기 (126)
    • Programming (14)
      • JAVA (4)
      • Spring (0)
      • Python (5)
    • Database (12)
      • Oracle (0)
      • Sybase (3)
      • HANA DB (1)
    • Algorithm (10)
      • 백준 문제풀이 (0)
      • 문제로 풀어보는 알고리즘 프로그래밍 (1)
      • 프로그래머스 (8)
    • SAP (43)
      • EAI (37)
      • EAI 예제 (1)
      • ABAP (4)
      • SAP BC (0)
    • Tool (4)
      • Eclipse (0)
    • Infra (3)
      • Network (3)
      • OS (0)
      • Storge (0)
    • Etc (21)
      • 시사 (15)
      • 맛집 (0)
    • Study (12)
      • 파이썬 머신러닝 프로젝트 (1)
      • 영어 (7)
      • 리눅스마스터 (3)
      • SQLD (0)

태그

  • DB
  • sap
  • SAP EAI
  • DATABASE
  • 코로나19
  • EAI
  • pI
  • 코로나
  • error
  • 프로그래머스

티스토리

반응형
250x250
hELLO · Designed By 정상우.
삐주

초급 개발자

Algorithm/프로그래머스

[프로그래머스] 알고리즘 문제 해설 - 가장 큰 정사각형 찾기

2020. 11. 14. 15:53
728x90
반응형

programmers.co.kr/learn/courses/18

 

알고리즘 문제 해설

프로그래머스의 모의테스트는 프로그래머스의 시스템에 익숙해지기 위한 테스트이며, 문제 자체는 2018 1ST KAKAO BLIND RECRUITMENT와 전혀 관계없습니다. 다만 모의테스트의 풀이에 대한 요청이 있어

programmers.co.kr

문제 설명

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합니다.

 

해설답안

class Solution {
	public int solution(int[][] board) {
		int answer = 0;
		int dp[][] = new int[1001][1001];
		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) {
					dp[i][j] = Math.min(dp[i][j - 1], Math.min(dp[i - 1][j], dp[i - 1][j - 1])) + 1;
					answer = Math.max(answer, dp[i][j]);
				}
			}
		}

		return answer*answer;
	}
}
728x90
반응형

'Algorithm > 프로그래머스' 카테고리의 다른 글

[Level1] 두 개 뽑아서 더하기  (0) 2020.11.27
[프로그래머스] 알고리즘 문제 해설 - 땅따먹기  (0) 2020.11.14
[프로그래머스] 알고리즘 문제 해설 - 순열 검사  (0) 2020.11.13
[프로그래머스] 알고리즘 문제 해설 - 순열 검사  (0) 2020.11.13
[프로그래머스] 알고리즘 문제 해설 - 자리수 더하기  (0) 2020.11.13
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [Level1] 두 개 뽑아서 더하기
    • [프로그래머스] 알고리즘 문제 해설 - 땅따먹기
    • [프로그래머스] 알고리즘 문제 해설 - 순열 검사
    • [프로그래머스] 알고리즘 문제 해설 - 순열 검사
    삐주
    삐주

    티스토리툴바