문제 설명
계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 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 이하인 자연수입니다.
- 물에 잠긴 지역은 0개 이상 10개 이하입니다.
- 집과 학교가 물에 잠긴 경우는 입력으로 주어지지 않습니다.
입출력 예
m | n | puddles | return |
4 | 3 | [[2, 2]] | 4 |
입출력 예 설명
나의 코드
처음에 bfs로 풀면 되겠지 했는데,,,
from collections import deque
def solution(m, n, puddles):
answer = 0
region=[[0 for i in range(m)] for j in range(n)]
ll=[]
dq=deque([(0,0)])
answer=0
while dq:
d=[(0,1),(1,0)]
x,y=dq.pop()
for xx,yy in d:
nx,ny=x+xx,y+yy
if nx==n-1 and ny==m-1:
ll.append(region[x][y]+1)
if 0<=nx<n and 0<=ny<m:
if [ny+1,nx+1] not in puddles:
if region[nx][ny]>0:
region[nx][ny]=region[x][y]+1
dq.append([nx,ny])
answer=len(ll)%1000000007
return answer
시간초과가 떴다...ㅠㅠㅠㅠ
최단거리 경우의 수를 찾는건 dp를 사용하는게 더 효율적인것같다.
def solution(m, n, puddles):
answer = 0
region=[[0 for i in range(m+1)] for j in range(n+1)]
region[1][1]=1
for i in range(1,n+1):
for j in range(1,m+1):
if i==1 and j==1 or [j,i] in puddles:
continue
else:
region[i][j]=region[i-1][j]+region[i][j-1]
answer=region[n][m]
return answer
뭐가 문제인걸까,,,,,,다시 해봐야겠다,,,,
def solution(m, n, puddles):
answer = 0
region=[[0 for i in range(m+1)] for j in range(n+1)] #가로가 m 세로가 n인 지도 그리기
region[1][1]=1 #집위치는 1,1
for i in range(1,n+1): #1부터 n까지
for j in range(1,m+1): #1부터 m까지
if i==1 and j==1 or [j,i] in puddles: #집(1,1)이거나 물웅덩이(puddles)라면
continue #지나가기
else: #아니라면
region[i][j]=region[i-1][j]+region[i][j-1] #왼쪽,윗쪽값 더해서 최단경로수 구하기
answer=region[n][m]%1000000007 #1,000,000,007로 나눈 나머지를 구해야하므로!!
return answer
마지막에 '학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성' 이부분을 주의깊게 보지않아서 효율성에서 문제가 난것같다....문제를 잘읽자!그리고 최단경로의 수는 무조건 dp!!!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스-타겟넘버 (0) | 2024.01.16 |
---|---|
프로그래머스-정수 삼각형 (1) | 2024.01.15 |
프로그래머스-콜라츠 추측 (1) | 2024.01.13 |
프로그래머스-옹알이(2) (1) | 2024.01.12 |
프로그래머스-문자열 나누기 (0) | 2024.01.12 |