본문으로 바로가기

프로그래머스_등굣길

category 알고리즘 2021. 4. 11. 18:33

programmers.co.kr/learn/courses/30/lessons/42898

 

코딩테스트 연습 - 등굣길

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

programmers.co.kr

 

처음엔 단순히 bfs로 풀어보려고 했습니다.

// 오답

from collections import deque

dx = [1, 0]
dy = [0, 1]


def solution(m, n, puddles):
    answer = 0
    max_num = 1000000007
    queue = deque([[1, 1]])

    board = [[0] * (m + 1) for _ in range(n + 1)]

    for x, y in puddles:
        board[y][x] = 1
    while queue:
        x1, y1 = queue.pop()

        for i in range(2):
            nx = x1 + dx[i]
            ny = y1 + dy[i]
            if 1 <= nx <= m and 1 <= ny <= n and not board[ny][nx]:
                if nx == m and ny == n:
                    answer += 1
                    break
                queue.append([nx, ny])

    return answer % max_num

m = 4
n = 3
puddles = [[2, 2]]

print(solution(m, n, puddles))

하지만 시간초과가 많이 났고, 결국엔 dp 문제라는 걸 깨닫게 되었습니다...

 

// 통과

def solution(m, n, puddles):
    max_num = 1000000007

    board = [[0] * (m + 1) for _ in range(n + 1)]
    board[1][1] = 1

    for i in range(1, n + 1):
        for j in range(1, m + 1):

            if i == 1 and j == 1:
                continue

            if [j, i] in puddles:
                board[i][j] = 0
            else:
                board[i][j] = board[i - 1][j] + board[i][j - 1]

    answer = board[n][m]

    return answer % max_num

 

'알고리즘' 카테고리의 다른 글

백준_20055  (0) 2021.04.25
백준_12026  (0) 2021.04.11
프로그래머스_주식가격  (0) 2021.04.04
프로그래머스_위장  (0) 2021.04.04
백준_촌수계산  (0) 2021.03.21