본문 바로가기
전공공부/코딩테스트

(c++) 프로그래머스 "가장 큰 사각형 찾기"

by 시아나 2022. 4. 12.

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


나의풀이

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

int solution(vector<vector<int>> board)
{
    int answer = 0;
    bool one = false;
    if (board.size() == 1 && board[0].size() == 1) {
        return board[0][0];
    }
    for (int i = 1; i < board.size(); i++) {
        for (int k = 1; k < board[0].size(); k++) {
            vector<int> tmp = { board[i - 1][k] ,board[i][k - 1] ,board[i - 1][k - 1] };
            if (*max_element(tmp.begin(), tmp.end())) one = true;
            int minest = (*min_element(tmp.begin(), tmp.end())) + 1;
            board[i][k] = board[i][k] == 0 ? 0 : minest;
            if (answer < board[i][k]) answer = board[i][k];
        }
    }
    if (answer == 0 && one) return 1;
    return answer * answer;
}