티스토리 뷰
14889번: 스타트와 링크
예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.
www.acmicpc.net
이문제는 삼성 sw역량 테스트 기출문제이다.
그냥 모든 경우를 탐색하여 가장 적은 차이를 구하면 되는 간단한 문제였던 것 같다.
더 효율적이게 하는 방법도 있을 수 있지만 다 탐색해도 시간초가 괜찮은거 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Ex_14889 {
static int[][] map;
static int minDiff = Integer.MAX_VALUE;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
map = new int[n][n];
StringTokenizer st;
ArrayList<Integer> arr = new ArrayList<>();
for(int i=0;i<n;i++){
arr.add(i);
st = new StringTokenizer(br.readLine(), " ");
for(int j=0;j<n;j++){
map[i][j] = Integer.parseInt(st.nextToken());
}
}
teamSet(arr,new boolean[n],0,n,n/2);
System.out.println(minDiff);
}
//가능한 팀의 조합을 만들어줌.
static void teamSet(ArrayList<Integer> arr, boolean[] visited, int start, int n, int r) {
if (r == 0) {
int min = getDiff(arr,visited,n);
if(min<minDiff)
minDiff = min;
return;
}
for (int i = start; i < n; i++) {
visited[i] = true;
teamSet(arr, visited, i + 1, n, r - 1);
visited[i] = false;
}
}
//만들어진 팀과 선택되지 않은 사람으로 구성된 팀의 능력차를 계산
static int getDiff(ArrayList<Integer> arr,boolean[] visited,int n){
int diff=0;
int team1Sum=0;
int team2Sum=0;
ArrayList<Integer> t1 = new ArrayList<>();
ArrayList<Integer> t2 = new ArrayList<>();
for(int i=0;i<arr.size();i++){
if(visited[i]==true){
t1.add(arr.get(i));
}else{
t2.add(arr.get(i));
}
}
for(int i=0;i<t1.size();i++){
for(int j=0;j<t1.size();j++){
if(i==j)continue;
team1Sum+=map[t1.get(i)][t1.get(j)];
team2Sum+=map[t2.get(i)][t2.get(j)];
}
}
return Math.abs(team1Sum-team2Sum);
}
}
최대한 많이 꾸준히 풀어서 올리고 다른사람의 코드와 비교도 해보려고 노력중..!!
'CS공부 > 알고리즘&문제풀이' 카테고리의 다른 글
[프로그래머스]DFS:네트워크(java) (0) | 2020.06.04 |
---|---|
[프로그래머스]DFS:타겟 넘버(java) (0) | 2020.06.03 |
[백준 16234]인구이동(java) (0) | 2020.05.26 |
[SW Expert Academy 1767]프로세서 연결하기(java) (0) | 2020.05.25 |
[프로그래머스]2018카카오블라인드:[3차]압축(java) (0) | 2020.05.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 삼성 sw역량 테스트
- programers
- 백준
- DP
- git
- 완전탐색
- Heap
- 정렬
- Stomp
- Baekjoon
- BFS
- JavaScript
- dfs
- 최소 스패닝 트리
- Oracle
- SWEA
- sockjs
- MST
- 분리 집합
- 운영체제
- 프로그래머스
- 알고리즘
- 채팅
- OS
- 코딩테스트
- java
- websocket
- 자바
- Spring
- 삼성 sw역량테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함