Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이썬
- XSS Game
- Sookmyung Information Security Study
- 자료구조 복습
- 머신러닝
- 드림핵
- Python
- hackerrank
- WarGame
- HTML
- Javascript
- siss
- lob
- 풀이
- BOJ Python
- C언어
- SWEA
- 숙명여자대학교 정보보안동아리
- The Loard of BOF
- 기계학습
- hackctf
- PHP 웹페이지 만들기
- BOJ
- c++
- 생활코딩
- 백준
- c
- 숙명여자대학교 정보보안 동아리
- CSS
- 웹페이지 만들기
Archives
- Today
- Total
혜랑's STORY
[BOJ_C] 14889번 본문
#문제
#풀이
n명을 n/2명으로 구성된 2개의 팀으로 나눈 뒤, 각 팀의 두명씩 추출하여 능력치를 계산하고 그 차를 구한다. 즉, n명을 n/2로 나누고 2중 for문으로 중복되지 않게 visited를 이용하여 2명을 추출한다. 그 뒤 map[i][j]+map[j][i]를 통하여 팀의 능력치를 더하고 그 값들의 차를 구하면 된다.
#코드
#include <stdio.h>
#include <math.h> //절댓값을 구하기 위함
int N, MIN = 1000000;
int map[20][20];
int visited[20];
//cur = 선수 번호 / cnt = 팀원 수
void f(int cnt, int cur) {
if (cnt == N / 2) {
int start = 0, link = 0;
//능력치 더하기
for (int i = 0; i < N; i++) {
for (int j = i + 1; j <= N; j++) {
if (visited[i] == 1 && visited[j] == 1) {
start += map[i][j];
start += map[j][i];
}
else if(visited[i] == 0 && visited[j] == 0){
link += map[i][j];
link += map[j][i];
}
}
}
//능력치 최소값 구하기
if (MIN > abs(start - link)) {
MIN = abs(start - link);
}
return;
}
//다음 선수
for (int i = cur; i < N; i++) {
if (visited[i] != 1) {
visited[i] = 1;
f(cnt + 1, i);
visited[i] = 0;
}
}
return;
}
int main() {
scanf_s("%d", &N);
//map[][] 입력받기
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf_s("%d", &map[i][j]);
}
}
//f()함수 호출하기
f(0, 0);
//min 출력하기
printf("%d", MIN);
return 0;
}
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
SW Expert Academy [D1] (0) | 2020.09.17 |
---|---|
[BOJ_Python] 6603번 (0) | 2020.08.05 |
[BOJ_Python] 2869번, 1620번 (0) | 2020.07.22 |
[BOJ_Python] 1431번, 1920번 (0) | 2020.07.21 |
[BOJ _Python] 11650번, 10814번 (0) | 2020.07.20 |