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
- 용어 정리
- 삼성 SW역량 테스트
- backtracking
- 백준 알고리즘
- 시장 선거 포스터 c++
- 15651
- 2370 c++
- DP
- fill함수
- Programmers
- BFS
- 주식 용어 정리
- 백준 2370
- MySQL
- 15651c++
- 백트레킹
- 백준알고리즘
- 주식 용어
- 위상정렬
- DFS
- 백준 15651
- 백준
- C++
- 에라토스테네스의 체
- 백준 1697
- 삼성SW 역량 테스트 기출문제
- 주린이
- 프로그래머스
- 브루트포스
- 삼성 SW 역량 테스트 기출 문제
Archives
- Today
- Total
빠켱이
백준 14889번 스타트와 링크[C++] - 삼성SW 역량 테스트 기출문제 본문
14889번은 백 트레킹 문제이지만 브루트 포스를 사용하면 시간 초과가 발생합니다.
성공을 못하신분들의 대부분은 시간 초과일 것일 것으로 예상됩니다.
따라서 해당 문제는 중복을 제거하는 작업을 코드에서 해주어야 합니다.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int n;
int s[20][20] = {0};
int team[20] = {0}; //같은팀 표시
int value = 10000;
void maketeam(int a, int num){
int sum_start = 0, sum_link = 0;
vector<int> start_v;
vector<int> link_v;
if(num == n/2){ //n/2명이 한팀으로 정해지면
for(int i = 0; i < n; i++){
if(team[i]) //같은팀끼리 한벡터에 넣기
start_v.push_back(i);
else{
link_v.push_back(i);
}
}
for(int i = 0; i < n/2; i++){
for(int j = 0; j < n/2; j++){
sum_start += s[start_v[i]][start_v[j]];
sum_link += s[link_v[i]][link_v[j]];
}
}
value = min(value, abs(sum_start-sum_link)); //현재 값과 팀능력치의 차이중 작은값을 저장
return;
}
for(int i = a; i < n; i++){
if(team[i])
continue;
else{
team[i] = 1;
maketeam(i, num+1);
team[i] = 0;
}
}
}
int main(){
scanf("%d", &n);
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
scanf("%d", &s[i][j]);
maketeam(0,0);
printf("%d", value);
return 0;
}
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
백준 1912번 연속합[C++] (0) | 2021.01.01 |
---|---|
백준 11053번 가장 긴 증가하는 부분 수열[C++] (0) | 2020.12.29 |
백준 15652 N과 M(4)[C++] (0) | 2020.12.29 |
백준 15651번 N과 M(3)[C++] (0) | 2020.12.29 |
백준 11654번 아스키 코드[C++] (0) | 2020.12.27 |
Comments