풀이
삼성 인사 담당자님, 모든 경우의 수를 다 돌려보면 된답니다.
코드
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int n, m, x, chk[14];
vector<pair<int, int> > a, b;
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &x);
if (x == 1) a.push_back({ i,j });
if (x == 2) b.push_back({ i,j });
}
}
sort(b.begin(), b.end());
fill(chk, chk+m, 1);
int res = 1e9;
do {
int sum = 0;
for (auto i : a) {
int mn = 1e9;
for (int j = 0; j < b.size(); j++) {
if (!chk[j]) continue;
mn = min(mn, abs(i.first - b[j].first) + abs(i.second - b[j].second));
}
sum += mn;
}
res = min(res, sum);
} while (prev_permutation(chk, chk+b.size()));
printf("%d", res);
return 0;
}
아무말
백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이