Blog Content

    티스토리 뷰

    1987번 백준(Baekjoon)

    <문제 풀이>


    같은 알파벳을 지날 수 없다는 조건이 있으므로 dfs를 통해 풀었다.


    먼저 입력을 char형으로 받아 맵을 만들었고, 이후 visit의 비교를 위해 'A'가 아스코드값으로 65이므로


    map[x][y]-65를 통해 방문여부를 판단하였다.


    <정답 코드>


    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
    #include <iostream>
    #include <vector>
     
    #define MAX 21
     
    using namespace std;
     
    int row, col;
    char map[MAX][MAX];
    int dx[4= { 00-11 };
    int dy[4= { 1-100 };
    int visit[26];
    vector<pair<intint>> v;
    int ans;
     
    void dfs(int cnt)
    {
        int x = v.front().first;
        int y = v.front().second;
        v.pop_back();
        for (int i = 0; i < 4; i++) {
            if (x + dx[i] >= 0 && y + dy[i] >= 0 && x + dx[i] < row && y + dy[i] < col)
                if (visit[map[x + dx[i]][y + dy[i]] - 65== 0) {
                    visit[map[x + dx[i]][y + dy[i]] - 65= 1;
                    v.push_back({ x + dx[i], y + dy[i] });
                    dfs(cnt + 1);
                    visit[map[x + dx[i]][y + dy[i]] - 65= 0;
                }
        }
        if (ans <= cnt)
            ans = cnt;
        return;
    }
     
    int main()
    {
        cin >> row >> col;
        for (int r = 0; r < row; r++)
            for (int c = 0; c < col; c++)
                cin >> map[r][c];
     
        visit[map[0][0- 65= 1;
        v.push_back({ 0,0 });
        dfs(1);
        cout << ans;
        return 0;
    }
    cs



    'C++ 문제풀이' 카테고리의 다른 글

    2004번 백준(Baekjoon)  (0) 2018.10.16
    2457번 백준(Baekjoon)  (0) 2018.10.12
    1068번 백준(Baekjoon)  (0) 2018.10.04
    1149번 백준(Baekjoon)  (0) 2018.10.04
    2579번 백준(Baekjoon)  (0) 2018.10.02

    Comments