반응형

www.acmicpc.net/problem/15686

 

15686번: 치킨 배달

크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸

www.acmicpc.net

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
#include <iostream>
#include <algorithm>
#define rep(i,n) for(int i=1;i<=n;i++)
using namespace std;
int n, m, arr[51][51];
int cnt = 0, ans = 987654321;
/*
    도시의 치킨 거리 = 모든 집의 치킨 거리의 합
    치킨 거리 = 현재 집에서 가장 가까운 치킨집과의 거리
    m개 남기고 나머지 다 폐업
*/
int chk() {
    int ret = 0;
    rep(i, n) {
        rep(j, n) {
            if (arr[i][j] == 1) {                                        // 현재 위치가 가정집이면
                int tmp = 987654321;
                rep(a, n) {
                    rep(b, n) {
                        if (arr[a][b] == 2)                                // 모든 치킨집과의 거리 계산
                            tmp = min(tmp, abs(i - a) + abs(j - b));    // 최솟값 저장
                        
                    }
                }
                ret += tmp;                                    // 도시의 치킨 거리 += 현재 집의 치킨 거리
            }
        }
    }
    return ret;
}
void dfs(int x, int y, int now) {
    if (now == m) {                    // m개만 남았으면 거리 체크
        ans = min(ans, chk());
        return;
    }
 
    for (int i = x; i <= n; i++) {
        y = 1;
        for (int j = y; j <= n; j++) {
            if (arr[i][j] == 2) {    // 치킨집 찾으면 0으로 변경
                arr[i][j] = 0;        // 폐업
                dfs(i, j, now - 1);    // 개수 1개 줄이고 계속 탐색
                arr[i][j] = 2;        // 다음 탐색을 위해 복구
            }
        }
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    rep(i, n) {
        rep(j, n) {
            cin >> arr[i][j];
            if (arr[i][j] == 2)
                cnt++;
        }
    }
    dfs(11, cnt);
    cout << ans;
}
cs
반응형

'백준 > 삼성기출' 카테고리의 다른 글

백준 14501  (0) 2021.02.15
백준 14500  (0) 2021.02.13
백준 14502  (0) 2021.02.03
백준 15684  (0) 2021.02.03
백준 14889  (0) 2021.01.29

+ Recent posts