일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- permutation
- 코틀린
- lcm
- expo
- 홈화면
- 11053
- Combination
- 1182
- 코테
- 11057
- 파이썬
- 앱
- 뒤로가기
- 6603
- 11054
- 백준
- 매일11시
- 나머지
- 9095
- itertools
- Android
- 1260
- 최소공배수
- Kotlin
- 순열
- 괄호
- Python
- 11기
- LCS
- 안드로이드
Archives
- Today
- Total
황소개발자
백준 1937 파이썬 python : 욕심쟁이 판다 @@황소처럼 우직하게@@ dp는 썻던걸 또 써먹는 알고리즘입니다. 본문
백준 문제 풀이
백준 1937 파이썬 python : 욕심쟁이 판다 @@황소처럼 우직하게@@ dp는 썻던걸 또 써먹는 알고리즘입니다.
hjp845 2020. 4. 25. 21:11반응형
dp 는 썻던걸 또 써먹어야됩니다.
그걸 어떻게 써먹을지 고민해야됩니다.
dp 각 칸에 거기서 시작했을 때의 최대값을 구하고,
좌우를 살피는데 더 큰 곳만 살피는데, 거기에 값이 있다면 본인 좌표에는 그 값 + 1 을 넣으면되는 거죠
근데 네 방향이니까 네 방향중에 max 값을 넣어야겠죠
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
n = int(input())
mat = []
for i in range(n):
mat.append(list(map(int, input().split())))
dp = [[-1 for _ in range(n)] for _ in range(n)]
dy = [0, 0, 1, -1]
dx = [1, -1, 0, 0]
def dfs(sy, sx):
# print('---------')
# for s in dp:
# print(s)
dp[sy][sx] = 0
lst = []
for i in range(4):
ny = sy + dy[i]
nx = sx + dx[i]
if 0 <= nx < n and 0 <= ny < n:
if mat[sy][sx] < mat[ny][nx]:
if dp[ny][nx] == -1:
dfs(ny, nx)
lst.append(dp[ny][nx])
if lst:
dp[sy][sx] = max(lst) + 1
else:
dp[sy][sx] = 1
ans = 0
for i in range(n):
for j in range(n):
if dp[i][j] == -1:
dfs(i, j)
for s in dp:
ans = max(ans, max(s))
print(ans)
반응형
'백준 문제 풀이' 카테고리의 다른 글
백준 2468 파이썬 python : 안전 영역 @@황소처럼 우직하게@@ 시간 재면서 풀자 (0) | 2020.04.26 |
---|---|
백준 6359 파이썬 python : 만취한 성범 @@황소처럼 우직하게@@ 뭐냐.. 이게 왜 dp여 그냥 구현이지 (0) | 2020.04.26 |
백준 1309 파이썬 python : 동물원 @@황소처럼 우직하게@@ 자 떠어나자 동해 바다로~ (0) | 2020.04.25 |
백준 10799 파이썬 python : 쇠막대기 @@황소처럼 우직하게@@ 구현 아이디어 한마디 (0) | 2020.04.25 |
백준 9012 파이썬 python : 괄호 @@황소처럼 우직하게@@ 괄호는 스택의 기본이죠 (0) | 2020.04.25 |
Comments