알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 연습문제 - 가장 큰 정사각형 찾기

HRuler 2020. 12. 11. 16:09

1. 문제

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

2. 나의 풀이

import java.util.*;

class Solution{
    public int solution(int [][]board){
        int answer = 0;
        int [][] dp = new int [2][board[0].length];
		for(int i = 0; i < board.length; i = i + 1) {
			if(i == 0) {
				for(int j = 0; j < board[0].length; j = j + 1) {
					dp[i][j] = board[i][j];
					if(dp[i][j] > answer) {
						answer = dp[i][j];
					}
				}
				continue;
			}
			
			for(int j = 0; j < board[0].length; j = j + 1) {
				if(board[i][j] == 0) {
					dp[1][j] = 0;
					continue;
				}
				if(j == 0) {
					dp[1][j] = board[i][j];
					continue;
				}
				int choiso = 1001;
				choiso = (int)Math.min(choiso, dp[0][j-1]);
				choiso = (int)Math.min(choiso, dp[1][j-1]);
				choiso = (int)Math.min(choiso, dp[0][j]);
				//System.out.println("choiso : " + choiso);
				dp[1][j] = choiso + 1;
                /*
				for(int [] imsi1 : dp) {
					System.out.println(Arrays.toString(imsi1));
				}
				System.out.println("");
                */
				if(dp[1][j] > answer) {
					answer = dp[1][j];
				}
			}
			for(int j = 0; j < board[0].length; j = j + 1) {
				dp[0][j] = dp[1][j];
				dp[1][j] = 0;
			}
		}
		return answer * answer;
    }
}

3. 다른 사람 풀이

class TryHelloWorld
{
    public int findLargestSquare(char [][]board)
    {
       int answer = 0;
        int[][] aa = new int[board.length][board[0].length];

        for(int i=0;i<board.length;i++) {
            for(int j=0;j<board[i].length;j++) {
                if( board[i][j] == 'O' ) {
                    aa[i][j] = 1;
                } else {
                    aa[i][j] = 0;
                }
            }
        }

        for(int i=1;i<aa.length;i++) {
            for(int j=1;j<aa[i].length;j++) {
                if( aa[i][j] == 1 ) {
                    int minVal = 0;
                    minVal = aa[i-1][j] < aa[i][j-1] ? aa[i-1][j] : aa[i][j-1];
                    minVal = aa[i-1][j-1] < minVal ? aa[i-1][j-1] : minVal;

                    aa[i][j] = minVal + 1;
                    answer = answer < aa[i][j] ? aa[i][j] : answer;
                }
            }
        }



        return answer*answer;
    }
    public static void main(String[] args)
    {
        TryHelloWorld test = new TryHelloWorld();
                char [][]board ={
                {'X','O','O','O','X'},
                {'X','O','O','O','O'},
                {'X','X','O','O','O'},
                {'X','X','O','O','O'},
                {'X','X','X','X','X'}};

        System.out.println(test.findLargestSquare(board));
    }
}