https://school.programmers.co.kr/learn/courses/30/lessons/42898
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
첫 풀이
1. dfs 방식으로 첫 시도를 해봤다
2. 좌표 방식이 헷갈려서 실패했다
#최단경로 m+n-2
from collections import deque
def solution(m, n, puddles):
answer = 0
cnt=0
local=[[0 for _ in range(m+1)] for _ in range(n+1)]
for i in puddles:
local[i[0]][i[1]]=1
q=deque()
q.append((1,1))
while q:
print(q)
xy=q.popleft()
if xy[0]==m and xy[1]==n:
cnt+=1
elif local[xy[0]][xy[1]]==0:
if xy[0]+1<m and xy[1]<n:
q.append((xy[0]+1,xy[1]))
if xy[0]<m and xy[1]+1<n:
q.append((xy[0],xy[1]+1))
return cnt%1000000007
더 나은 답안
1. 2차원 dp테이블을 사용해 다이나믹 방식으로 풀어봤다
2. 웅덩이가 있는곳은 dp테이블에 -1로 표시해둔다
3. dp 테이블을 탐색할 때 웅덩이가 있는곳은 0으로 바꿔 경우의 수에 영향이 없게 만든다
def solution(m, n, puddles):
dp=[[0 for _ in range(m+1)] for _ in range(n+1)]
dp[1][1]=1
for i,j in puddles:
dp[j][i]=-1
for i in range(1,n+1):
for j in range(1,m+1):
if dp[i][j]==-1:
dp[i][j]=0
else:
dp[i][j]+=(dp[i-1][j]+dp[i][j-1])%1000000007
return dp[n][m]
배운 점
1. 2차원리스트에서는 좌표를 신경써야한다
dp=[[1,2,3],
[4,5,6]]
리스트가 있을때 dp[1] -> [4,5,6]] 처럼 먼저 행으로 접근을 하기 때문이다
흔히 수학계에서 사용하는 dp[1][2]에서 (1,2) 좌표와는 반대로 생각해야한다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 파이썬 문제풀이 - 등굣길 (0) | 2023.04.20 |
---|---|
[프로그래머스] SQL 문제풀이 - 조건에 부합하는 중고거래 댓글 조회하기 (1) | 2023.03.13 |
[프로그래머스] 파이썬 문제풀이 - 단어 변환 (0) | 2023.03.03 |
[프로그래머스] SQL 문제풀이 - 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.02.09 |
[프로그래머스] SQL 문제풀이 - 12세 이하인 여자 환자 목록 출력하기 (0) | 2023.02.09 |
댓글