8000 Create 15686.cpp · rinrin528/basic-algo-lecture@f248b21 · GitHub
[go: up one dir, main page]

8000 Skip to content

Commit f248b21

Browse files
Create 15686.cpp
1 parent 73df409 commit f248b21

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

0x0D/15686.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// http://boj.kr/445279200beb4050ac92ffc9dc68d68b
2+
#include <bits/stdc++.h>
3+
using namespace std;
4+
5+
#define X first
6+
#define Y second
7+
8+
int board[55][55];
9+
int n, m;
10+
vector<pair<int,int>> chicken;
11+
vector<pair<int,int>> house;
12+
13+
int main(void) {
14+
ios::sync_with_stdio(0);
15+
cin.tie(0);
16+
cin >> n >> m;
17+
for(int i = 0; i < n; i++){
18+
for(int j = 0; j < n; j++){
19+
cin >> board[i][j];
20+
if(board[i][j] == 1) house.push_back({i, j});
21+
if(board[i][j] == 2) chicken.push_back({i, j});
22+
}
23+
}
24+
vector<int> brute(chicken.size(), 1);
25+
fill(brute.begin(), brute.begin() + chicken.size() - m, 0); // 앞의 chicken.size() - m 칸은 0, 뒤의 m칸은 1
26+
int mn = 0x7f7f7f7f; // 답을 저장할 변수
27+
do{
28+
int dist = 0; // 도시의 치킨 거리를 저장할 변수
29+
for(auto h : house){
30+
int tmp = 0x7f7f7f7f; // 집의 치킨 거리를 저장할 변수
31+
for(int i = 0; i < chicken.size(); i++){
32+
if(brute[i] == 0) continue;
33+
tmp = min(tmp, abs(chicken[i].X - h.X) + abs(chicken[i].Y - h.Y)); // 집의 치킨 거리 갱신
34+
}
35+
dist += tmp;
36+
}
37+
mn = min(mn, dist);
38+
}while(next_permutation(brute.begin(), brute.end()));
39+
cout << mn;
40+
}

0 commit comments

Comments
 (0)
0