본문 바로가기
Develop/백준 (Cpp)

[백준] 5569번 : 출근 경로 (C++)

by Tarra 2024. 3. 8.

5569번 : 출근 경로


문제)

상근이가 사는 도시는 남북 방향으로 도로가 w개, 동서 방향으로 도로가 h개 있다. 

 

남북 방향 도로는 서쪽부터 순서대로 번호가 1, 2, ..., w로 매겨져 있다. 또, 동서 방향 도로는 남쪽부터 순서대로 번호가 1, 2, ..., h로 매겨져 있다. 서쪽에서 i번째 남북 방향 도로와 남쪽에서 j번째 동서 방향 도로가 만나는 교차로는 (i, j)이다.

 

상근이는 교차로 (1, 1)에 살고 있고, 교차로 (w, h)에 있는 회사에 차로 다니고 있다. 차는 도로로만 이동할 수 있다. 상근이는 회사에 최대한 빨리 가기 위해서, 동쪽 또는 북쪽으로만 이동할 수 있다. 또, 이 도시는 교통 사고를 줄이기 위해서 교차로를 돈 차량은 그 다음 교차로에서 다시 방향을 바꿀 수 없다. 즉, 교차로에서 방향을 바꾼 후, 1 블록만 이동한 후 다시 방향을 바꿀 수 없다.

 

상근이가 회사에 출근할 수 있는 경로의 수는 몇 가지 일까?

w와 h가 주어졌을 때, 가능한 출근 경로의 개수를 구하는 프로그램을 작성하시오.

 

 

 

입력 :

첫째 줄에 w와 h가 주어진다. (2 ≤ w, h ≤ 100)

 

 

 

출력 :

첫째 줄에 상근이가 출근할 수 있는 경로의 개수를 100000로 나눈 나머지를 출력한다.

 

 

 

 

 

 

 

풀이)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// 5569. 출근 경로
#include <iostream>
 
using namespace std;
 
int w, h;
int dp[101][101][3][2];
int d[2][2= {{01}, {10}};
 
 
// x 현재 x 위치
// y 현재 y 위치
// dir 현재 방향
// cnt 직진해야하는 수
 
long long recur(int x, int y, int dir, int cnt)
{
    if (x > w || y > h) return 0;
 
    if (x == w && y == h) return 1;
 
    if (dp[x][y][dir][cnt] != -1return dp[x][y][dir][cnt] % 100000;
 
    long long ret = 0;
 
    if (cnt > 0) ret += recur(x + d[dir][0], y + d[dir][1], dir, cnt - 1) % 100000;
    else
    {
        for (int i = 0; i < 2; i++)
        {
            if (dir == 3) ret += recur(x + d[i][0], y + d[i][1], i, 0) % 100000;
            else if (dir == i) ret += recur(x + d[i][0], y + d[i][1], i, cnt) % 100000;
            else ret += recur(x + d[i][0], y + d[i][1], i, 1) % 100000;
        }
    }
 
    dp[x][y][dir][cnt] = ret % 100000;
 
    return ret;
}
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    cin >> w >> h;
    fill(&dp[0][0][0][0], &dp[100][100][2][2], -1);
 
    cout << recur(1130) % 100000;
 
    return 0;
}
cs

출처 : https://www.acmicpc.net/problem/5569 

 

5569번: 출근 경로

상근이가 사는 도시는 남북 방향으로 도로가 w개, 동서 방향으로 도로가 h개 있다.  남북 방향 도로는 서쪽부터 순서대로 번호가 1, 2, ..., w로 매겨져 있다. 또, 동서 방향 도로는 남쪽부터 순서대

www.acmicpc.net