@Eeap
velog
@Eeap
전체 방문자
오늘
어제
  • 전체 (168)
    • osam (1)
    • Cloud (21)
      • Docker (2)
      • AWS (13)
    • AI & Data (7)
    • Algorithm (76)
      • Baekjoon (75)
      • Codeforces (1)
    • Language (18)
      • Java (18)
    • Back-end (17)
      • Spring (3)
      • JSP & Servlet (12)
      • Go (2)
    • 일상 (4)
    • 기타 (8)
    • git (1)
    • Infra (9)
      • Apache Kafka (5)
      • Kubernetes (4)
      • 기타 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • AWS CodeStar
  • 심폴릭링크
  • Python
  • 오블완
  • AWS CodeArtifact
  • 티스토리챌린지
  • invokemodel api
  • converse api
  • bedrock agent
  • flink
  • knowledge bases
  • bedrock api
  • sagemaker unified studio
  • 인터페이스
  • SageMaker
  • java
  • bedrock
  • CLASS
  • AWS CodeCatalyst
  • Agent

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
@Eeap

velog

Algorithm/Baekjoon

1520번 파이썬

2022. 4. 12. 20:58
반응형

 

처음에 아래 코드처럼 모든 배열을 다 돌아서 dp만을 이용하는 방식으로 풀려고 했는데 예제에서 20에서 17로 내려갈때 20은 2로 되어있는데 17은 1로 되어있어서 문제 해결이 되지 않았다. 그래서 다른 방식으로라도 해답을 구하긴 했는데 다른 예외 경우가 있는지 틀렸다고 떠서 다른 사람의 방식을 ㅂ참고했다..! 

import sys
input = sys.stdin.readline
m,n=map(int,input().split())
ary = [list(map(int,input().split())) for _ in range(m)]
p = [[0 for _ in range(n)] for __ in range(m)]
p[0][0]=1
dx=[1,-1,0,0]
dy=[0,0,1,-1]

for row in range(m):
  for col in range(n):
    if row==m-1 and col==n-1:
      continue
    for i in range(4):
      r=row+dx[i]
      c=col+dy[i]
      if 0<=r<m and 0<=c<n and ary[row][col] > ary[r][c]:
        p[r][c]+=p[row][col]
print(p[m-1][n-1])

대부분의 사람들이 dp랑 dfs방식을 섞어서 썼다. 첨에 dfs 쓰면 시간 초과가 뜰것 같아서 생각안해봤는데 이런 방식이 되는줄 몰랐다 ,,,

사람들은 dfs를 끝에서부터(도착지) 출발지까지 값을 끌고 올라오는 방식을 이용했다..!

방문을 했을 경우엔 값을 0으로 바꾸고

내리막길로 내려가는 for문을 돌려서 만약 다음에 내리막길이 있을 경우 dfs를 현재 dp에 추가하는 방식을 이용했다.

중간에     p[r][c]!=-1:     이 구문은 해당 인덱스를 이미 방문했을 경우의 처리이다!

이렇게 하면 출발지 값에 도착지까지 가는 경우의 수가 저장된다..!

 

import sys
input = sys.stdin.readline
m,n=map(int,input().split())
ary = [list(map(int,input().split())) for _ in range(m)]
p = [[-1 for _ in range(n)] for __ in range(m)]
dx=[1,-1,0,0]
dy=[0,0,1,-1]
def dfs(r,c):
  if r==m-1 and c == n-1:
    return 1
  if p[r][c]!=-1:
    return p[r][c]
  p[r][c]=0
  for i in range(4):
    row = r+dx[i]
    col = c+dy[i]
    if 0 <= row < m and 0 <= col < n and ary[row][col] < ary[r][c]:
      p[r][c]+=dfs(row,col)
  return p[r][c]
print(dfs(0,0))

 

반응형
저작자표시 (새창열림)

'Algorithm > Baekjoon' 카테고리의 다른 글

1309번 파이썬  (0) 2022.04.13
1965번 파이썬  (0) 2022.04.13
1890번 파이썬  (0) 2022.04.11
2225번 파이썬  (0) 2022.04.10
16194번 파이썬  (0) 2022.04.09
    'Algorithm/Baekjoon' 카테고리의 다른 글
    • 1309번 파이썬
    • 1965번 파이썬
    • 1890번 파이썬
    • 2225번 파이썬
    @Eeap
    @Eeap

    티스토리툴바