[Programmers] 등굣길 - Python

2024. 11. 17. 20:23·알고리즘/프로그래머스

 
난이도: Lv. 3
 

문제 설명


계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다.

아래 그림은 m = 4, n = 3 인 경우입니다.

 
가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다.

격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어집니다. 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해주세요.
 

제한 사항


  • 격자의 크기 m, n은 1 이상 100 이하인 자연수입니다.
    • m과 n이 모두 1인 경우는 입력으로 주어지지 않습니다.
  • 물에 잠긴 지역은 0개 이상 10개 이하입니다.
  • 집과 학교가 물에 잠긴 경우는 입력으로 주어지지 않습니다.

 

문제 예제


mnpuddlesreturn
43[[2, 2]]4

 

 

내 풀이


def solution(m, n, puddles):
    dp = [[1 for _ in range(m)] for _ in range(n)]
    
    for x, y in puddles:
        dp[y-1][x-1] = 0

    for i in range(n):
        for j in range(m):
            if dp[i][j] == 0: continue
            if i == 0 and j != 0:
                dp[i][j] = dp[i][j-1]
            elif j == 0 and i != 0:
                dp[i][j] = dp[i-1][j]
            elif i != 0 and j != 0:
                dp[i][j] = dp[i][j-1] + dp[i-1][j]

    return dp[-1][-1] % 1000000007

 
 
처음에 종이에 좀 써가면서 이것저것 해보다가 결국 마지막 좌표까지 가는길은 어디로 가든 길이가 똑같다라는 것을 알게 되었다.
 
따라서 문제에는 최단경로의 개수를 구하라고 했는데 그냥 마지막 좌표로 가는 경로의 모든 수를 구하면 됐다.
 
그리고 각 좌표에 갈 수 있는 개수를 처음부터 써보기 시작했다. 다음과 같은 결과가 나왔다.
 

 
일단 row가 0일때랑 col이 0일 때 갈 수 있는 경로의 수는 무조건 1개밖에 없었다.
왜냐하면 오른쪽과 아래로밖에 이동이 안되기 때문이다.
 
그리고 row와 col이 0이 아닐때는 아래 그림과 같이 왼쪽 값의 경우와 위쪽값의 경우를 더하면 지금 좌표로 올 수 있는 경우의 수를 구할 수 있었다.
 

 
물웅덩이가 있는 좌표에는 0을 넣어주면 원하는 결과를 얻을 수 있다.


 
DP 문제는 아직도 어려운 것 같다.. 좀 더 많이 풀어봐야할 것 같다..
 
[Programmers] 등굣길

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Programmers] 오픈채팅방  (0) 2024.11.24
[Programmers] 불량 사용자 - Python  (0) 2024.11.23
[Programmers] 프렌즈4블록 - Python  (1) 2024.11.20
[Programmers] 야근 지수 - Python  (1) 2024.11.16
[Programmers] 테이블 해시 함수 - Python  (2) 2024.11.15
'알고리즘/프로그래머스' 카테고리의 다른 글
  • [Programmers] 불량 사용자 - Python
  • [Programmers] 프렌즈4블록 - Python
  • [Programmers] 야근 지수 - Python
  • [Programmers] 테이블 해시 함수 - Python
Laewon Jeong
Laewon Jeong
  • Laewon Jeong
    래원
    Laewon Jeong
    글쓰기 | 관리
  • GitHub

    • github.com/laewonJeong
  • 전체
    오늘
    어제
    • 분류 전체보기 (172)
      • Docker 및 Kubernetes (11)
        • Docker (5)
        • Kubernetes (6)
      • Data Engineering (18)
        • Hadoop (5)
        • Spark (5)
        • Kafka (5)
        • Airflow (3)
      • CI|CD (3)
      • 알고리즘 (136)
        • 알고리즘 (2)
        • LeetCode (118)
        • 프로그래머스 (11)
        • BOJ (1)
        • 코딩테스트 대비 (4)
      • 서버 (2)
        • 미니 서버 (2)
      • 잡담 (1)
  • 태그

    프로그래머스
    dfs
    분산처리
    아파치 스파크
    Apache Spark
    아파치 하둡
    docker
    도커
    티스토리챌린지
    문자열
    그래프
    programmers
    코딩테스트
    BFS
    heapq
    백트래킹
    leetcode
    누적합
    DP
    쿠버네티스
    오블완
    이진탐색
    분산
    리트코드
    Python
    String
    알고리즘
    Kubernetes
    우선순위큐
    파이썬
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Laewon Jeong
[Programmers] 등굣길 - Python
상단으로

티스토리툴바