ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • BFS
  • 깃
  • greedy
  • dfs
  • java
  • getOrDefault
  • React
  • Android
  • entrySet
  • Arrays.sort()
  • stack
  • 안드로이드
  • Comparator
  • 깃허브
  • DP
  • 스택/큐
  • kotiln
  • reactjs
  • 코틀린
  • sort
  • 프로그래머스 Lv.2
  • Queue
  • PriorityQueue
  • compareTo()
  • 프로그래머스
  • git
  • 백준
  • 해시
  • git bash
  • HashMap

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 Lv.2 : 가장 큰 정사각형 찾기

2022. 3. 16. 15:38

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

 

풀이

해당 문제의 규칙은 다음과 같다.

  1. 행 또는 열의 길이가 1이면 정사각형의 넓이는 1이다.
  2. 루프를 돌아 자신의 위치([i][j])의 값이 0이 아닌 경우, 자신의 기준으로 왼쪽상단(↖), 왼쪽(←), 위쪽(↑) 의 최솟값을 구한뒤, 자신의 위치에 최솟값+1을 할당한다.
  3. 그렇게 구한 board값 중 최댓값을 answer에 할당 해준 뒤 answer*answer로 정사각형 넓이를 구해 리턴한다.

2번의 최솟값이 0이상인 경우엔 1로 이루어진 정사각형이 만들어 진다는 것이고, 그 최솟값에 +1을 할당해주는 것은 한 변의 길이를 1씩 더해주는 것과 같다.

따라서 한 변의 길이의 최댓값에 제곱을 해주면 가장 큰 정사각형을 구할 수 있다.

 

전체코드

class Solution{
    public int solution(int [][]board){
        int answer = 0;
        int row = board.length;
        int col = board[0].length;
        
        // board의 행 또는 열이 1로 주어질 때 예외처리
        if(row<2||col<2){
            return 1;
        }
        
        for(int i=1;i<row;i++){
            for(int j=1;j<col;j++){
                if(board[i][j] !=0){                
                    // board[i][j]의 왼쪽 상단, 왼쪽, 위쪽 중 최솟값 구해서 +1 후 할당
                    board[i][j] = Math.min(board[i-1][j-1],Math.min(board[i-1][j],board[i][j-1]))+1;
                }                
                // 그 중 최댓값을 answer에 할당
                if(answer < board[i][j]) answer = board[i][j];
            }
        }

        return answer*answer; // 정사각형 넓이
    }
}
저작자표시 (새창열림)

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

[Java] 프로그래머스 : 문자열을 정수로 바꾸기(feat. String to Int)  (0) 2022.04.15
[Java] 프로그래머스 Lv.2 : 타겟 넘버  (0) 2022.03.16
[Java] 프로그래머스 Lv.2 : 구명보트  (0) 2022.03.14
[Java] 프로그래머스 Lv.2 : 소수 찾기  (0) 2022.03.13
[Java] 프로그래머스 Lv.2 : 카펫  (0) 2022.03.13
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 : 문자열을 정수로 바꾸기(feat. String to Int)
    • [Java] 프로그래머스 Lv.2 : 타겟 넘버
    • [Java] 프로그래머스 Lv.2 : 구명보트
    • [Java] 프로그래머스 Lv.2 : 소수 찾기
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바