백준/완전 탐색

[백준 1189번 / C++] 컴백홈

배발자 2022. 1. 25.

목차

    반응형

    dfs를 활용해서 완전 탐색으로 풀면 된다. 

     

    1. dfs 기본 문법을 활용해서 상 하 좌 우에 조건에 부합되면 들어간다. 

    2. 집의 좌표값과 일치하고 좌표값까지의 distance가 K와 일치하면 cnt+1을 해준다. 

    3. 재귀 처리후 돌아오면 visited 배열을 0으로 세팅한다. (다른 방향으로 가는 루트도 체크 해줘야하기 때문에 초기화)

    
      
    #include <iostream>
    using namespace std;
    int dx[4] = { 0,0,-1,1 };
    int dy[4] = { 1,-1,0,0 };
    int m, n, k;
    int map[5][5];
    int visited[5][5];
    int cnt;
    void dfs(int y, int x, int dis) {
    if (x == n - 1 && y == 0&&dis==k) {
    cnt++;
    return;
    }
    for (int i = 0; i < 4; i++) {
    int nx = x + dx[i];
    int ny = y + dy[i];
    if (nx < 0 || nx >= n || ny < 0 || ny >= m )continue;
    if (visited[ny][nx]|| map[nx][ny])continue;
    visited[ny][nx] = 1;
    dfs(ny, nx, dis + 1);
    visited[ny][nx] = 0;
    }
    }
    int main() {
    cin >> m >> n >> k;
    for (int i = 0; i < m; i++) {
    string s; cin >> s;
    for (int j = 0; j < n; j++) {
    if (s[j] == 'T')map[i][j] = 1;
    }
    }
    visited[m - 1][0] = 1;
    dfs(m - 1, 0, 1);
    cout << cnt;
    }

     

     

    1189번: 컴백홈

    첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다...

    www.acmicpc.net

     

    반응형

    '백준 > 완전 탐색' 카테고리의 다른 글

    [백준 2529번 / C++] 부등호  (0) 2022.02.19
    [백준 1107번 / C++] 리모컨  (0) 2022.02.14
    [백준 14502번 / C++] 연구소  (0) 2022.01.28
    [백준 14620번 / C++] 꽃길  (0) 2022.01.25
    [백준 2589번 / C++] 보물섬  (0) 2022.01.14

    댓글