삐까냥의 파도타기
14889번) 스타트와 링크 본문
문제 출처 : https://www.acmicpc.net/problem/14889
2018년 4월 6일 - 다듬지 않은 시험 코드 (30분) public class Q14889 { static boolean[] isVisit; static int people, halfPeople, minResult = -1; static int[][] values;
public static void main(String[] args) { Scanner sc = new Scanner(System.in); people = sc.nextInt(); halfPeople = people / 2; isVisit = new boolean[people];
values = new int[people][people]; for (int i = 0; i < people; i++) { for (int j = 0; j < people; j++) { values[i][j] = sc.nextInt(); } }
for (int i = 0; i < people; i++) { isVisit[i] = true; selectPeople(i, 1, 0); isVisit[i] = false; } System.out.println(minResult); }
static void selectPeople(int num, int count, int startTeamPower) { if (count > 1) { for (int i = 0; i < people; i++) { if (i != num && isVisit[i]) { startTeamPower += values[i][num]; startTeamPower += values[num][i]; } } }
if (halfPeople == count) { int linkTeamResult = 0; for (int i = 0; i < people; i++) { if (!isVisit[i]) { for (int j = 0; j < people; j++) { if (i != j && !isVisit[j]) { linkTeamResult += values[i][j]; } } } } // System.out.println(linkTeamResult + " / " + startTeamPower); int result = linkTeamResult - startTeamPower; if (result < 0) { result*= -1; } if (minResult == -1 || minResult > result) { minResult = result; } return ; }
for (int i = num+1; i < people; i++) { isVisit[i] = true; selectPeople(i, count+1, startTeamPower); isVisit[i] = false; } } } |
2018년 4월 12일 - 다듬지 않은 코드 (소요시간 13분) import java.util.Scanner; public class Q14889 { static int size, result = -1; static int[][] map; static boolean[] isVisit;
public static void main(String[] args) { Scanner sc = new Scanner(System.in); size = sc.nextInt(); map = new int[size][size]; isVisit = new boolean[size]; for (int i = 0; i < size; i++) { for (int j = 0 ; j < size; j++) { map[i][j] = sc.nextInt(); } }
for (int i = 0; i < size; i++) { isVisit[i] = true; selectPeople(i, 1); isVisit[i] = false; }
System.out.println(result); }
static void selectPeople(int num, int count) { if (count >= size/2) { int firstTeamResult = 0, secondTeamResult = 0;
for (int i = 0; i < size; i++) { for (int j = 0 ; j < size; j++) { if (isVisit[i] && isVisit[j]) { firstTeamResult += map[i][j]; } else if (!isVisit[i] && !isVisit[j]) { secondTeamResult += map[i][j]; } } }
int tempResult = firstTeamResult - secondTeamResult; if (tempResult < 0) { tempResult *= -1; }
if (result == -1 || result > tempResult) { result = tempResult; } return; }
for (int i = num+1; i < size; i++) { isVisit[i] = true; selectPeople(i, count+1); isVisit[i] = false; } } }
|
'코딩 > 삼성 SW 역량 테스트 기출' 카테고리의 다른 글
14891번) 톱니바퀴 (0) | 2018.04.07 |
---|---|
14888번) 연산자 끼워넣기 (0) | 2018.04.06 |
14503번) 로봇 청소기 (0) | 2018.04.06 |
14890번) 경사로 (0) | 2018.04.06 |
3190번) 뱀 (0) | 2018.04.06 |