티스토리 뷰
[ 프로그래머스 ] 가장 큰 정사각형 찾기 ( java )
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를 반환해 주면 됩니다.
출처: 프로그래머스 코딩 테스트 연습, 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
핵심
-
모든 점을 검사하며, 최대 사각형이 되는지 확인될까?
O(N^4) 시간초과. dp로 중복처리? 방법이 안 떠오름 -
계획 단계 수정 - 정사각형을 찾기 위한 새로운 방법, 분해하기 ( DP )
한 변의 길이 N 정사각형에 N-1 길이의 정사각형이 4가지 다른 위치로 들어갈 수 있다. 말로 설명하기 어렵..
사각형의 제일 오른쪽 아래 꼭지점에 길이 표시가능하다. 이러한 표시를 보고 특정 위치에서의 사각형을 구할 수 있다.
아래 블로그에 참조. 그림부터가 설명이 되게 좋다.
배열에서 가장 큰 정사각형 찾기
배열에서 가장 큰 정사각형 찾기 프로그래머스에서 제공하는 문제 중 하나입니다. 배열 내부를 탐색하여 가장 큰 정사각형을 찾는 알고리즘입니다. 배열은 아래와 그림과 같이 제공되며 1이 정사각형일 때, 배열..
blog.sonim1.com
len[y][x] : y, x를 제일 오른쪽 아래 꼭지점으로 하는 정사각형의 변의 길이
len[y][x] = min( 왼쪽 len, 위 len, 왼쪽 위 대각선 len ) = min( len[y][x-1], len[y-1][x], len[y-1][x-1] )
추가적으로 더 궁금한 점 있으면 댓글 달아주세요
코드
class Solution{
public int solution(int [][]board){
int up, left, upleft;
for(int y = 1 ; y < board.length; y++) {
for(int x = 1 ; x < board[y].length; x++) {
if(board[y][x] == 1) {
up = board[y-1][x];
left = board[y][x-1];
upleft = board[y-1][x-1];
int min = Math.min(up, left);
min = Math.min(min , upleft);
board[y][x] = min+1;
}
}
}
int ans = 0;
for(int y = 0 ; y < board.length; y++) {
for(int x= 0 ; x < board[0].length ; x++) {
if(board[y][x] > 0) {
ans = Math.max(ans, board[y][x]);
}
}
}
return ans*ans;
}
}
'CS > 알고리즘 풀이' 카테고리의 다른 글
[ 프로그래머스 - 2019 카카오 공채 ] 후보키 ( 자바, bitmask ) (2) | 2020.01.23 |
---|---|
[ 프로그래머스 - 2019 카카오 공채 ] 후보키 ( 자바, DFS ) (0) | 2020.01.22 |
[ 프로그래머스 ] 땅따먹기 ( 자바 ) (0) | 2020.01.22 |
[ 프로그래머스 ] 라면공장 ( 자바 ) (0) | 2020.01.05 |
[ 프로그래머스 ] 짝지어 제거하기 ( 자바 ) (0) | 2019.12.30 |
- Total
- Today
- Yesterday
- java
- 자바
- 17825
- 라면공장
- 카카오 2020 공채
- 문자열을 정수로 바꾸기
- 백준
- 17779
- 게리맨더링 2
- 찾아라 프로그래밍 마에스터
- 정수 내림차순으로 배치하기
- Brainf**k 인터프리터
- 투포인터
- 단체사진 찍기
- 오블완
- 티스토리챌린지
- 프로그래머스
- 3954
- 카카오2020 공채
- 124 나라의 숫자
- 후보키
- 주사위 윷놀이
- 가장 큰 정사각형 찾기
- DP
- 2018 카카오 공채
- 짝지어 제거하기
- programmers
- 2019 카카오 공채
- 괄호 변환
- 큰 수 만들기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |