250x250
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
- JAVA #언어 #프로그래밍 #IT #개발 #코딩
- 일정
- 배낭여행
- 서버
- 추억
- 메시지 큐
- JAVA #언어 #프로그래밍 #코딩 #static #정적함수 #정적변수 #클래스
- #DB#SQLD#자격증
- 경험
- 여행 #
- 파이썬
- 계획
- 겨울
- IT
- 유럽여행
- 실비용
- 영국
- 이탈리아
- 내심정
- 인프라
- RabbitMQ
- 예약
- 샐러리
- 리눅스
- 1달살기
- ip
- 여행
- 준비
- JAVA #객체지향 #프로그래밍 #언어 #IT #기초
- 유럽
Archives
- Today
- Total
YoonWould!!
[삼성SWTest준비]14889번 스타트와 링크 본문
728x90
URL : https://www.acmicpc.net/problem/14889
삼성SW 기출 문제 한 번에 보기 : https://www.acmicpc.net/workbook/view/1152
삼성 SW 역량평가 기출문제 어떻게 풀지?
먼저, 1,2,3팀과 4,5,6팀 생성, 1,2,4팀 3,5,6 팀 이런식으로 팀을 생성하는 과정에서 팀을 나누는 것이 가장 중요하다고 판단을 했습니다.
그래서 경로를 끝까지 탐색할 수 있는 DFS를 사용했습니다.
그리고 N/2의 인원이 모인다면 계산을 통해 차이의 최소를 구하려고 하였습니다.
하지만 끝까지 경로를 들어갔을 때 다시 뒤로 나와서 다른 팀 구성의 차이를 구해야 하기 때문에 백트래킹을 사용하였습니다.
※필요 역량 정리하기!!!※
1. dfs
2. 백트래킹
백트래킹 연습 URL : https://www.acmicpc.net/workbook/view/344
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include<iostream> #include<algorithm> #define INF 100000000 using namespace std; int map[21][21]; bool visit[21]; int n,result,ans=INF; void dfs(int v, int len); void calculate(); int sum(int* a); int main() { cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> map[i][j]; } } dfs(0,0); printf("%d", ans); return 0; } int sum(int a[]) { int sum = 0; for (int i = 1; i <= n / 2; i++) { for (int j = i + 1; j <= n / 2; j++) { sum += map[a[i]][a[j]]; sum += map[a[j]][a[i]]; } } return sum; } void calculate() { int a[11]; int b[11]; int ai = 1,bi=1; for (int i = 1; i <= n; i++) { if (visit[i]) { a[ai++] = i; } else { b[bi++] = i; } } int asum = sum(a); int bsum = sum(b); if (asum > bsum) result = asum - bsum; if (bsum > asum) result = bsum - asum; ans = min(ans, result); } void dfs(int v, int len) { if (n / 2 == len) { calculate(); } else { for (int i = v + 1; i <= n; i++) { if (!visit[i]) { visit[i] = true; dfs(i, len + 1); } } } visit[v] = false; // 백트래킹 } | cs |
728x90
'<SW> > 알고리즘 + 자료구조' 카테고리의 다른 글
[백트래킹]2583번 영역 구하기 (0) | 2018.09.28 |
---|---|
[백트래킹]2661번 좋은수열 (0) | 2018.09.26 |
[삼성SWTest준비]14502번 연구소 (0) | 2018.09.22 |
[BFS] 7576번 토마토 (0) | 2018.08.14 |
[BFS]1697번 숨바꼭질 (0) | 2018.08.13 |