Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 인턴 지원
- JSTL
- 인턴 후기
- Database
- PyAmdecoder
- 방명록 만들기
- frontend
- Layered Architecture
- 메모리 포랜식
- EER
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
- jsp
- DBMS
- webhacking 처음
- riceteacatpanda
- 3단계 지역 DB
- react
- SessionAttribute
- 정보보호병 후기
- mysql
- 소개딩
- Django
- 네이버 인턴
- 행정지역 DB
- restapi
- 소프트웨어 개발보안 경진대회
- Forensic 절차
- spring
- reversing.kr
- 동읍면 DB
Archives
- Today
- Total
웹찢남
[백준 1915 가장 큰 정사각형 문제] PYTHON 본문
전형적인 Dynamic Programming 문제로 머리를 굴려서 방안을 모색해야 한다.
새로운 DP 배열을 사용하기보다 주어진 배열을 사용하기로 했다.
문제를 푸는 법은 기존의 배열에서 for 문으로 모든 index를 탐색하며
만약 자신, 왼쪽, 위, 왼쪽 위의 index 값이 1일 경우 정사각형을 이루므로
자신을 제외한 3개의 index의 min 값을 자신의 index에 더하는 것으로 구현했다.
만약 길이 3짜리 정사각형일 경우 왼쪽, 위, 왼쪽 위의 min 값은 2가 되므로 길이 3이상에서도 문제없다.
DP문제는 구현은 비교적 쉬운 것 같지만 상상을 많이 해야해서 힘든 것 같다.
case = []
N, M = map(int, input().split())
for _ in range(N):
case.append(list(map(int, input().rstrip())))
answer = 0
for i in range(0, N):
for j in range(0, M):
if i > 0 and j > 0 and case[i][j] != 0:
case[i][j] += min(case[i-1][j-1], case[i][j-1], case[i-1][j])
answer = max(answer, case[i][j])
print(answer*answer)
'백준 Algorithm' 카테고리의 다른 글
[백준 5557 1학년 문제] PYTHON (0) | 2021.08.25 |
---|---|
[백준 10942 펠린드롬? 문제] PYTHON (0) | 2021.08.24 |
[백준 1916 최소비용 구하기 문제] PYTHON (0) | 2021.08.20 |
[백준 2252 줄 세우기 문제] PYTHON (0) | 2021.08.18 |
[백준 2056 작업 문제] PYTHON (0) | 2021.08.17 |
Comments