본문 바로가기
개발/Coding Test

[프로그래머스 C++ Lv2] 가장 큰 정사각형 찾기

by Eunduck 2022. 6. 6.
728x90

안녕하십니까. Eun🦆입니다.

풀이법 입니다.

 

 

코딩테스트 연습 - 가장 큰 정사각형 찾기

[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9

programmers.co.kr

#include <iostream>
#include<vector>
using namespace std;

//정사각형을 어떻게 찾는지 간단하게 설명하자면
//배열의 [1][1]부터 반복문을 돌린다. (첫 번째 행, 첫 번째 열 무시, 이유는 2번 참고)
//현재 값이 1일 경우, 좌측값, 상단값, 좌측상단값 중 가장 작은 값의 +1 한 값을 현재 값으로 할당.
//배열이 끝날 때 까지 반복.
//배열의 가장 큰 값이 현재 배열의 가장 큰 정사각형의 값이 된다.

int solution(vector<vector<int>> board)
{
    int answer = 0;
    int MAX = 0;
    
    if(board.size() > 1 & board[0].size() > 1)
    {
        for(int y=1;y<board.size();y++)
        {
            for(int x=1;x<board[0].size();x++)
            {
                //printf("board[%d][%d]=%d\n",y,x,board[y][x]);
                if(board[y][x]==1)
                {
                    board[y][x] = min(min(board[y-1][x-1],board[y-1][x]),board[y][x-1])+1;
                    if(answer < board[y][x])
                        answer = board[y][x];
                }
            }
        }
    }
    else
    {
        for(int y=0;y<board.size();y++)
        {
            for(int x=0;x<board[0].size();x++)
            {
                if(answer < board[y][x])
                    answer = board[y][x];
            }
        }
    }
    return answer*answer;
}

 

네이버 블로그 리뉴얼입니다.

(https://blog.naver.com/unsuk1/221950271861)

728x90

댓글