KoreanFoodie's Study
SW 역량테스트 - [백준] 스타트와 링크 문제 풀이/해답/코드 (C++ / JAVA) 본문
Data Structures, Algorithm/SW 역량테스트
SW 역량테스트 - [백준] 스타트와 링크 문제 풀이/해답/코드 (C++ / JAVA)
GoldGiver 2020. 10. 15. 23:40
SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!
해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다.
코드에 대한 설명은 주석을 참고해 주세요 :)
문제 링크 : www.acmicpc.net/problem/14889
해답 코드 :
#include <iostream>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;
int N;
int map[20][20];
int p_sum[20][20];
// divide team to 'start' and 'link'
// 0 : 'start', 1 : 'link'
int divide[20];
int ans;
// compute difference, using divide[20]
void compute_diff() {
int st_sum = 0;
int lk_sum = 0;
/*
vector<int> start;
vector<int> link;
for (int i = 0; i < N; i++) {
if (divide[i] == 0) {
start.push_back(i);
}
else {
link.push_back(i);
}
}
// calculate st_sum
for (int i = 0; i < (N / 2) - 1; i++) {
for (int j = i + 1; j < N / 2; j++) {
st_sum += p_sum[start[i]][start[j]];
lk_sum += p_sum[link[i]][link[j]];
}
}
*/
for (int i = 0; i < N-1; i++) {
for (int j = i+1; j < N; j++) {
if (divide[i] == 0 && divide[j] == 0) {
st_sum = st_sum + p_sum[i][j];
} else if (divide[i] == 1 && divide[j] == 1) {
lk_sum = lk_sum + p_sum[i][j];
}
}
}
ans = min(ans, abs(st_sum - lk_sum));
}
// divide team into 'start' and 'link'
// # of 'link' members = cnt
void make_team(int x, int cnt) {
if (ans == 0) return;
if (cnt == N / 2) {
compute_diff();
return;
}
for (int i = x; i < N; i++) {
if (divide[i] == 1) continue;
// mark 'link'
divide[i] = 1;
make_team(i, cnt + 1);
// restore
divide[i] = 0;
}
}
int main() {
ans = INT32_MAX;
fill(divide, divide + 20, 0);
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> map[i][j];
}
}
for (int i = 0; i < N-1; i++) {
for (int j = i+1; j < N; j++) {
p_sum[i][j] = map[i][j] + map[j][i];
}
}
make_team(0, 0);
cout << ans;
return 0;
}
SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)
SW 역량테스트 준비 - C++ 코드, Java 코드
SW 역량테스트 준비 - 백준 알고리즘 문제
'Data Structures, Algorithm > SW 역량테스트' 카테고리의 다른 글
SW 역량테스트 - [백준] 드래곤 커브 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
---|---|
SW 역량테스트 - [백준] 감시 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 연산자 끼워넣기 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 퇴사 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 주사위 굴리기 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
Comments