La foret rouge
Published on

[PS] 학교 가는 길

Authors
  • avatar
    Name
    신주용

Programmers: 학교 가는 길

Conditions

triangle
  • 집에서 학교까지 가는 길은 m×nm \times n 크기의 격자 모양으로 나타낼 수 있음.
  • mm, nn은 1 이상 100 이하인 자연수. mm, nn이 모두 1인 경우는 입력으로 주어지지 않음.
  • 집의 좌표는 (1,1)(1, 1), 학교의 좌표는 (m,n)(m, n).
  • 물에 잠긴 지역인 puddles의 좌표는 0개 이상 10개 이하.
  • 집과 학교가 물에 잠긴 경우는 입력으로 주어지지 않음.
  • 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 반환.

Design

matrix=[0000001111011201124]matrix = \begin{bmatrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 1 \\ 0 & 1 & -\infty & 1 & 2 \\ 0 & 1 & 1 & 2 & 4 \\ \end{bmatrix}
  • 해당 지점까지 올 수 있는 경로의 개수를 이차원 배열로 나타냄.
  • mijm_{ij}가 puddle이면 그 지점은 갈 수 없음.
  • m(i1)jm_{(i-1)j}이 puddle이면 mij=mi(j1)m_{ij} = m_{i(j-1)}, vice versa.
  • 둘 다 puddle이 아니라면 mij=m(i1)j+mi(j1)m_{ij} = m_{(i-1)j} + m_{i(j-1)}.

Recursive equation

C[i,j]: The number of paths from (1,1) to (m,n)C[i,j]={1,if m = 1 and n = 1,if matrixij is a puddlematrix(i1)j,if matrixi(j1) is a puddlematrixi(j1),if matrix(i1)j is a puddlematrix(i1)j+matrixi(j1),otherwiseC[i,j]:\text{ The number of paths from } (1,1) \text{ to } (m,n)\\ C[i,j] = \begin{cases} 1, & \text{if } m \text{ = 1 and } n \text{ = 1} \\ -\infty, & \text{if } matrix_{ij} \text{ is a puddle} \\ matrix_{(i-1)j}, & \text{if } matrix_{i(j-1)} \text{ is a puddle} \\ matrix_{i(j-1)}, & \text{if } matrix_{(i-1)j} \text{ is a puddle} \\ matrix_{(i-1)j} + matrix_{i(j-1)}, & \text{otherwise} \end{cases}

Implementation

code