반응형
A형 필수 알고리즘을 체계적으로 배우고 싶다면? (인프런 바로가기)
https://www.codetree.ai/training-field/frequent-problems/problems/three-at-dawn-and-four-at-dusk
조삼모사 문제 풀이는 BOJ 14889 : 스타트와 링크와 같다.
#include <stdio.h>
#define MAX (20 + 5)
int T, N, halfN;
int MAP[MAX][MAX];
int visit[MAX];
int minAnswer;
void input()
{
scanf("%d", &N);
halfN = N / 2;
for (int r = 0; r < N; r++)
for (int c = 0; c < N; c++)
scanf("%d", &MAP[r][c]);
}
int abs(int a, int b)
{
return (a > b) ? a - b : b - a;
}
int minValue()
{
int pair[MAX * 2] = { 0 };
int sum1, sum2, scnt, lcnt;
scnt = lcnt = 0;
for (int i = 0; i < N; i++)
{
if (visit[i]) pair[scnt++] = i;
else pair[halfN + lcnt++] = i;
}
sum1 = sum2 = 0;
for (int r = 0; r < halfN; r++)
{
for (int c = r + 1; c < halfN; c++)
{
sum1 += MAP[pair[r]][pair[c]] + MAP[pair[c]][pair[r]];
sum2 += MAP[pair[r + halfN]][pair[c + halfN]] + MAP[pair[c + halfN]][pair[r + halfN]];
}
}
return abs(sum1, sum2);
}
void DFS(int L, int st)
{
if (L > halfN)
{
int tmp = minValue();
if (tmp < minAnswer) minAnswer = tmp;
return;
}
for (int i = st; i < N; i++)
{
if (visit[i] == 1) continue;
visit[i] = 1;
DFS(L + 1, i);
visit[i] = 0;
}
}
int main(void)
{
// scanf("%d", &T);
T = 1;
for (int tc = 1; tc <= T; tc++)
{
input();
minAnswer = 0x7fff0000;
DFS(1, 0);
printf("%d\n", minAnswer);
}
return 0;
}
반응형
'알고리즘 > [ADV] 삼성 SW 역량 테스트 A형' 카테고리의 다른 글
[코드트리] 돌아가는 팔각의자 (삼성 SW 역량테스트 2017 하반기 오후 1번) (0) | 2024.06.07 |
---|---|
[코드트리] 보도블럭 (삼성 SW 역량테스트 2017 하반기 오전 2번) (1) | 2024.06.07 |
[코드트리] 방화벽 설치하기 (삼성 SW 역량테스트 2017 상반기 오후 2번) (0) | 2024.06.07 |
[코드트리] 자율주행 자동차 (삼성 SW 역량테스트 2017 상반기 오후 1번) (1) | 2024.06.06 |
[코드트리] 외주 수익 최대화하기 (삼성 SW 역량테스트 2017 상반기 오전 2번) (0) | 2024.06.06 |
댓글