문제
https://school.programmers.co.kr/learn/courses/30/lessons/42898
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Level 4로 나와있지만, 학창 시절에 배웠던 걸 잘만 기억하면 Level 2 이하의 난이도가 된다.
주요 아이디어
최단 경로 경우의 수를 구하는 문제를 기억하는가?
기억이 안나면 보고 오자. (링크)
간단하게 요약하자면, x[i][j] 까지 도달하는 경우의 수는 x[i-1][j] 경우의 수 + x[i][j-1] 경우의 수이다.
예시.
예시로 나온 문제의 최단경로 경우의 수를 체크하면 다음과 같다.
그렇다면 웅덩이가 있는 경우는 어떨까?
웅덩이가 존재하는 경우에는 해당 칸을 0으로 취급하고, 더하지 않으면 경우의 수를 올바르게 구할 수 있다.
코드 구현 (Python 3)
더보기
def solution(m, n, puddles):
answer = 0
# dp 리스트 2차원 리스트로 구성
dp = [[0]*m for _ in range(n)]
# 시작 위치 표시
dp[0][0] = 1
# 시작 위치부터 돌기
for i in range(n):
for j in range(m):
up = [i-1, j]
left = [i, j-1]
# 웅덩이가 아닐 경우 & 시작 위치가 아닐 경우
if ([j+1, i+1] not in puddles) and ((i, j) != (0,0)):
dp[i][j] = (dp[up[0]][up[1]] + dp[left[0]][left[1]]) % 1000000007
return dp[-1][-1]
제출 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단어 변환 (0) | 2024.04.11 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 (0) | 2024.04.11 |
[프로그래머스] 조이스틱 (0) | 2024.04.07 |
[프로그래머스] 튜플 (0) | 2024.04.07 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2024.04.07 |