헤이지니
heyjinn.dev
  • 분류 전체보기 (66)
    • 알고리즘 💻 (21)
      • BOJ (12)
      • 요약정리 (6)
      • 과제 (3)
    • BackEnd 🌱 (13)
      • spring (13)
    • 📚study✨ (12)
      • Docker & Kubernetes (8)
      • 기타 (4)
    • ComputerScience 🐥 (8)
      • 운영체제 (0)
      • 컴퓨터네트워크 (8)
      • 데이터베이스 (0)
    • 에러 해결 👍 (6)
    • 후기 🔥 (4)
      • 세미나 (2)
      • 인턴 (0)
      • 프로젝트 (0)
    • 기타 (0)
    • 일상 (1)

인기 글

태그

  • 프로그래머스
  • 두 원 사이의 정수 쌍
  • EC2
  • 백트래킹
  • 자바
  • AWS
  • 순열
  • Python
  • dfs
  • 조합

최근 글

08-08 15:28
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
알고리즘 💻/BOJ

[프로그래머스, Python] 등굣길

2023. 10. 31. 00:35

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 학교(m,n)에서 집(0,0)으로 가는 방법

def dfs(x, y, dp):
    if x < 0 or y < 0 or dp[y][x] == -1:
        return 0
    if dp[y][x] == 0:
        dp[y][x] = dfs(x - 1, y, dp) + dfs(x, y - 1, dp)
    return dp[y][x]


def solution(m, n, puddles):
    dp = [[0 for _ in range(m)] for _ in range(n)]
    for p in puddles:
        x, y = p
        dp[y-1][x-1] = -1
    dp[0][0] = 1
    ans = dfs(m - 1, n - 1, dp)
    return ans % 1000000007

(m,n)에서 부터 dfs를 시작해서 dp라는 배열에 현재 위치까지 오는 경우의 수를 전부 더해서 저장합니다. 

dp[0][0]를 1로 설정하여 if문을 돌지 않게 합니다.

2. 집(0,0)에서 학교(m,n)으로 가는 방법

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
d = [[1,0], [0,1]]
def dfs(x, y, dp, m, n):
    if y == n-1 and x == m-1 :
        return 1
    if dp[y][x] != 0:
        return dp[y][x]

    for i in range(2):
        ny = y + d[i][0]
        nx = x + d[i][1]

        if 0 <= ny < n and 0 <= nx < m:
            if dp[ny][nx] != -1:
                dp[y][x]+=dfs(nx,ny,dp,m,n)
    return dp[y][x]
def solution(m, n, puddles):
    dp = [[0 for _ in range(m)] for _ in range(n)]
    for p in puddles:
        x, y = p
        dp[y-1][x-1] = -1
    answer = dfs(0,0, dp, m, n)
    print(dp)
    return answer % 1000000007
print(solution(4, 3, [[2, 2]]))

(0,0)에서부터 dfs를 돌면서 dp배열에 값을 memoization 합니다. 이때, (m,n)에 도달하면 1을 리턴합니다. 

 

참고

 

[프로그래머스] 등굣길 Python 풀이

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42898이 문제는 카테고리가 다이나믹 프로그래밍으로 분류된 만큼 동적 계획법을 이용한 방법으로 풀이를 하지 않으면 효율성 검사에서 시

velog.io

 

저작자표시 (새창열림)
    '알고리즘 💻/BOJ' 카테고리의 다른 글
    • [SWEA, Python] 백만 장자 프로젝트
    • [프로그래머스, Python] 두 원 사이의 정수 쌍
    • [프로그래머스, Python] 광물 캐기
    • [프로그래머스, Python] 게임 맵 최단거리
    heyjinn.dev
    안녕하세요 ~ https://github.com/toki0411 부족하지만 열심히 공부중입니다 :D

    티스토리툴바