ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ 9184 [신나는 함수 실행]
    알고리즘 풀이/BFS(너비 우선 탐색) 2021. 3. 7. 23:03

    BOJ 신나는 함수 실행 : www.acmicpc.net/problem/9184

     

    9184번: 신나는 함수 실행

    입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.

    www.acmicpc.net

    신나지 않은 함수 실행이다.

     

    메모이제이션을 사용해 풀었다.

     

    배열 인덱스에 50을 더한 이유는 마이너스도 있으니깐,,

     

    밑에 코드는 +50때문에 눈이 좀 피곤할 수도 있다.

     

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int arr[102][102][102];
    bool visited[102][102][102];
     
    int w(int a, int b, int c)
    {
        if (visited[a + 50][b + 50][c + 50])
        {
            return arr[a + 50][b + 50][c + 50];
        }
     
        if (a <= 0 || b <= 0 || c <= 0)
        {
            return 1;
        }
     
        if (a > 20 || b > 20 || c > 20)
        {
            int res = w(202020);
            visited[70][70][70= true;
            arr[70][70][70= res;
            return res;
        }
     
        if (a < b && b < c)
        {
            int x = w(a, b, c - 1);
            visited[a + 50][b + 50][c - 1 + 50= true;
            arr[a + 50][b + 50][c - 1 + 50= x;
     
            int y = w(a, b - 1, c - 1);
            visited[a + 50][b - 1 + 50][c - 1 + 50= true;
            arr[a + 50][b - 1 + 50][c - 1 + 50= y;
            
            int z = w(a, b - 1, c);
            visited[a + 50][b - 1 + 50][c + 50= true;
            arr[a + 50][b - 1 + 50][c + 50= z;
     
            return x + y - z;
        }
     
        int x = w(a - 1, b, c);
        visited[a - 1 + 50][b + 50][c + 50= true;
        arr[a - 1 + 50][b + 50][c + 50= x;
     
        int y = w(a - 1, b - 1, c);
        visited[a - 1 + 50][b - 1 + 50][c + 50= true;
        arr[a - 1 + 50][b - 1 + 50][c + 50= y;
     
        int z = w(a - 1, b, c - 1);
        visited[a - 1 + 50][b + 50][c - 1 + 50= true;
        arr[a - 1 + 50][b + 50][c - 1 + 50= z;
     
        int k = w(a - 1, b - 1, c - 1);
        visited[a - 1 + 50][b - 1 + 50][c - 1 + 50= true;
        arr[a - 1 + 50][b - 1 + 50][c - 1 + 50= k;
     
        return x + y + z - k;
    }
     
    int main()
    {
        cin.tie(0);
        ios::sync_with_stdio(0);
     
        while (true)
        {
            int a, b, c;
     
            cin >> a >> b >> c;
     
            if (a == -1 && b == -1 && c == -1)
            {
                break;
            }
            int result = w(a, b, c);
            cout << "w(" << a << ", " << b << ", " << c << ") = " << w(a, b, c) << endl;
        }
     
        return 0;
    }
    cs
    반응형

    '알고리즘 풀이 > BFS(너비 우선 탐색)' 카테고리의 다른 글

    BOJ 17836 [공주님을 구해라!]  (0) 2021.03.07
    BOJ 17141 [연구소 2]  (0) 2021.03.04
    BOJ 11559 [Puyo Puyo]  (4) 2018.10.04
    BOJ 2146 [다리 만들기]  (2) 2018.10.04
    BOJ 1726 [로봇]  (0) 2018.10.04

    댓글

Designed by Tistory.