반응형
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 |
Tags
- 변수
- 알고리즘
- json파싱
- Exception
- 주사위굴리기
- mybatis
- ReferenceType
- 백준
- ClassPathResource
- 내맘대로정리
- 프로그래머스
- JSON
- 자바
- SQL
- Char[]
- primitivetype
- sql태그
- string
- 자바오류
- 차이
- 데이터탑입
- 참조타입
- include태그
- char
- java
- 시뮬레이션
- 코딩테스트
- 원시타입
- 차이점
- Spring
Archives
- Today
- Total
재채기는 H
백준 14889 - 스타트와 링크 JAVA 본문
반응형
https://www.acmicpc.net/problem/14889
30분정도? 금방 해결한 문제이다. 기분이 좋았다.
Combination(조합)을 통해서 임의로 팀원을 N/2명씩 나누었다.
그리고 각각의 능력치를 합한 후 최소값으로 초기화해주는 과정을 해주면 해결하는 문제였다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class 백준_스타트와링크_14889 {
static int N, gab = Integer.MAX_VALUE;
static int[][] map;
static boolean[] visited;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
map = new int[N][N];
visited= new boolean[N];
for(int i=0;i<N;i++) {
st= new StringTokenizer(br.readLine());
for(int j=0;j<N;j++) {
map[i][j]= Integer.parseInt(st.nextToken());
}
}
//팀 나누기
divideTeam(0,N,N/2);
System.out.println(gab);
}
//팀 나누기 Combination(조합)이용
static void divideTeam(int depth, int n, int r) {
if(r==0) {
// true/false로 팀 나누기 oneTeam, anotherTeam
ArrayList<Integer> oneTeam = new ArrayList<>();
ArrayList<Integer> anotherTeam = new ArrayList<>();
for(int i=0;i<N;i++) {
if(visited[i]) {
oneTeam.add(i);
}else {
anotherTeam.add(i);
}
}
checkGab(oneTeam, anotherTeam);
return;
}
if(depth==n) {
return;
}else {
visited[depth]=true;
divideTeam(depth+1, n,r-1);
visited[depth]=false;
divideTeam(depth+1,n,r);
}
}
//두팀의 차이 체크하기
static void checkGab(ArrayList<Integer> oneTeam, ArrayList<Integer> anotherTeam) {
int one=0;
int another=0;
//한팀에 3명일 때 EX) {1,2,3}{4,5,6}
// 이중for문을 통해 구하기 {1,2}+{2,1}+{1,3}+{3,1}+{2,3}+{3,2}
for(int i=0;i<N/2;i++) {
for(int j=i+1;j<N/2;j++) {
one += (map[oneTeam.get(i)][oneTeam.get(j)] + map[oneTeam.get(j)][oneTeam.get(i)]);
another += (map[anotherTeam.get(i)][anotherTeam.get(j)] + map[anotherTeam.get(j)][anotherTeam.get(i)]);
}
}
//전역변수인 gab 최소인값을 초기화해주기
gab = Math.min(gab, Math.abs(one-another));
}
}
반응형
'알고리즘' 카테고리의 다른 글
백준 14891 - 톱니바퀴 JAVA (0) | 2020.07.28 |
---|---|
백준 15683 - 감시 JAVA (0) | 2020.07.25 |
백준 14888 - 연산자 끼워넣기 JAVA (0) | 2020.07.24 |
백준 14503 - 로봇 청소기 JAVA (0) | 2020.07.22 |
백준 14502 - 연구소 JAVA (0) | 2020.07.22 |
Comments