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
- 이진탐색
- 자물쇠와 열쇠
- 구현
- 백준 12865
- java
- 덱
- 자바
- 알고리즘
- 코딩테스트
- programmers
- 프로그래머스
- jparepository
- BOJ
- 자료구조
- entitymanager
- 백준
- boj2343
- BOJ3985
- 파괴되지않은건물
- BOJ #Java #1003 #DP
- 이분탐색
- 백준2346
- 백준 14888
- 백준14502
- BOJ11724
- binarysearch
- 백준14889
- boj2792
Archives
- Today
- Total
Hzim-dev
[BOJ] 14889 스타트와 링크 - Java 본문
문제
https://www.acmicpc.net/problem/14889
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
풀이
- N이 주어졌을 때 N/2명으로 두 팀을 나눈다
- 각 팀 간의 능력치 차이가 최소가 되는 경우를 구한다
코드
import java.util.Arrays;
import java.util.Scanner;
public class Main{
static int n, min;
static int[][] team;
static boolean[] used;
static int[] teamA;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
team = new int[n][n];
used = new boolean[n];
min = Integer.MAX_VALUE;
teamA = new int[n/2];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
team[i][j] = sc.nextInt();
}
}
Comb(0, 0);
System.out.println(min);
}
private static void Comb(int cnt, int start) {
if(cnt == n/2){
int[] teamB = new int[n/2];
int idx = 0;
for(int i=0; i<n; i++){
if(!used[i]){
teamB[idx++] = i;
}
}
int a = 0, b = 0;
for(int i=0; i<n/2; i++){
for(int j=0; j<n/2; j++){
a += team[teamA[i]][teamA[j]];
b += team[teamB[i]][teamB[j]];
}
}
min= Math.min(min, Math.abs(a-b));
return;
}
for(int i=start; i<n; i++){
teamA[cnt] = i;
used[i] = true;
Comb(cnt+1, i+1);
used[i] = false;
}
}
}
- 팀원이 중복되지 않고, 두 팀을 나눠야하므로 조합 사용
- 각각의 팀원 별로 주어진 능력치를 합산하여 팀A와 팀B의 능력치의 차와 최소 값을 비교하며 최소 값 갱신
'알고리즘' 카테고리의 다른 글
[Programmers] 자물쇠와 열쇠 - Java (0) | 2024.07.23 |
---|---|
[BOJ] 14502 연구소 - Java (0) | 2023.03.05 |
[BOJ] 12865 평범한 배낭 - Java (0) | 2023.03.01 |
[BOJ] 14888 연산자 끼워넣기 - Java (0) | 2023.03.01 |
[BOJ] 19621 회의실 배정 2 - Java (0) | 2023.03.01 |