[프로그래머스] 가장 큰 정사각형 찾기 (Python)

2021. 3. 23. 22:05·코딩 테스트
728x90

🍒문제

programmers.co.kr/learn/courses/30/lessons/12905?language=python3

 

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

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

programmers.co.kr

 

🍒풀이

전형적인 DP문제.

처음에 이 문제를 for문을 돌려 풀었더니 O(N^3)의 시간복잡도가 나와 효율성에서 시간초과가 났다.

따라서 시간복잡도를 줄이기 위해서 DP를 적용해서 풀어야한다.

이 문제에서는 메모이제이션(memoization) 기법을 사용하는데, 왼쪽 위에서부터 index를 업데이트를 해준다.

해당 칸 (board[y][x])의 값이 1이면 왼쪽, 위, 대각선왼쪽 위 3부분을 확인해서 가장 작은 값 + 1 로 업데이트 해준다.

 

최종적으로 가장 큰 값의 index를 제곱하여 가장 큰 정사각형의 넓이를 answer로 출력한다.

 

🍒코드


def solution(board):
    answer = 1234
    w = len(board[0])
    h = len(board)
    
    for y in range(1, h):
        for x in range(1, w):
            if board[y][x] == 1:
                board[y][x] = min(board[y-1][x-1], min(board[y-1][x], board[y][x-1])) + 1
    
    max_val = 0
    for i in range(h):
        for j in range(w):
            max_val = max(max_val, board[i][j])
    answer = max_val**2
    
          
    return answer
728x90

'코딩 테스트' 카테고리의 다른 글

[프로그래머스] 게임 맵 최단거리 (C++)  (0) 2021.03.23
[프로그래머스] 타겟넘버 (Python)  (0) 2021.03.23
[프로그래머스] 문자열 압축 (Python)  (0) 2021.03.22
[기타] 시간 복잡도 / 예외처리  (0) 2021.03.20
[프로그래머스] 이진 변환 반복하기 (Python)  (0) 2021.03.18
'코딩 테스트' 카테고리의 다른 글
  • [프로그래머스] 게임 맵 최단거리 (C++)
  • [프로그래머스] 타겟넘버 (Python)
  • [프로그래머스] 문자열 압축 (Python)
  • [기타] 시간 복잡도 / 예외처리
zoodi
zoodi
IT/개발 관련 지식을 기록하는 블로그입니다.
  • zoodi
    오늘의 기록
    zoodi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 후기
        • 컨퍼런스
        • 일상리뷰
      • 금융경제
        • 뉴스
        • 금융IT용어
        • 경제 및 부동산
      • 코딩 테스트
      • 스터디
        • JAVA
        • Kotlin
        • Spring
        • React, Nextjs
        • 인공지능 AI
        • Cloud & k8s
        • Kafka
        • Database
        • Network
        • Algorithm
        • Hadoop
        • LINUX
        • R Programming
        • 기타 (소공, 보안)
      • 도서
      • 기타
  • 블로그 메뉴

    • 홈
    • 스터디
    • 금융경제
    • 후기
    • 기타
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    Spring
    springboot
    금융용어
    codility
    알고리즘
    kafka
    이분탐색
    리트코드
    LeetCode
    코테공부
    네트워크
    CodingTest
    쿠버네티스
    Kotlin
    코딩
    코딜리티
    코테
    자료구조
    스프링부트
    java
    Python
    카카오코테
    스프링
    db
    pythoncodingtest
    MySQL
    자바
    C++
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
zoodi
[프로그래머스] 가장 큰 정사각형 찾기 (Python)
상단으로

티스토리툴바