← 실전 문제

막힌 칸을 피하는 경로 수

C++디버깅

배열의 왼쪽 위 칸에서 오른쪽 아래 칸까지 이동해요. 한 번에 오른쪽 또는 아래로 한 칸만 이동할 수 있어요. 0은 지나갈 수 있는 칸, 1은 막힌 칸이에요.

서로 다른 이동 경로가 몇 개인지 구해서 1,000,000,007로 나눈 나머지를 반환해요. int solution(vector<vector<int>> board)가 올바른 결과를 반환하도록 잘못된 한 줄을 고쳐 주세요.

매개변수와 반환값

행 수와 열 수는 각각 120, 모든 행의 길이는 같아요. 값은 0 또는 1이에요. 시작 칸과 도착 칸도 막혀 있을 수 있어요. 경로가 없으면 0이에요. 1×1에서 그 칸이 열려 있으면 이동하지 않는 경로 한 개를 세요. 배열은 비어 있지 않아요. 반환값은 01,000,000,006인 int예요.

예시

  1. [[0,0,0],[0,1,0],[0,0,0]] → 2: 가운데를 피하려면 위쪽 가장자리나 왼쪽 가장자리를 따라가는 두 경로가 있어요.
  2. [[0,0,0],[0,0,0]] → 3: 아래로 한 번 이동하는 위치를 세 곳 중 하나로 고를 수 있어요.

자동 채점 입력·출력

첫 줄은 행 수 R과 열 수 C예요. 다음 R줄에 C개의 0 또는 1이 있어요. 경로 수의 나머지를 한 줄에 출력해요. main은 채점용이며 수정 대상은 solution의 한 줄이에요.

예시 입력

3 3
0 0 0
0 1 0
0 0 0

예상 결과

2

예시 입력

2 3
0 0 0
0 0 0

예상 결과

3
핵심 개념
  • dp-2d: 각 칸에 도착하는 경우의 수를 이전 칸에서 이어 받아요.
  • array-2d: 실제 칸과 바깥 경계가 포함된 DP 좌표를 구분해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기