반응형
https://www.acmicpc.net/problem/6987
6987번: 월드컵
월드컵 조별 최종 예선에서는 6개국으로 구성된 각 조별로 동일한 조에 소속된 국가들과 한 번씩, 각 국가별로 총 5번의 경기를 치른다. 조별리그가 끝난 후, 기자가 보내온 각 나라의 승, 무승부
www.acmicpc.net
전수조사 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
받은 결과 2차원 배열 result, 만들 결과 이차원 배열 madeResult, round별 home, away team들이 저장될 vector vs를 선언해줍니다. 매 round별 두 team이 대결하므로 6개의 팀 중 2개를 조합으로 구성해 vs에 저장해줍니다.
📔 풀이과정
매 test case마다 dfs함수를 수행합니다.
매 round별 home, away team은 3가지 결과를 가질 수 있습니다.
1. home 승, away 패
2. home 패, away 승
3. home 무, away 무
매 round별 3가지 상태에 대해 madeResult에 반영 후 재귀적으로 함수를 호출해줍니다. 각 상태별 함수 실행이 끝난 뒤에는 원복해줘야합니다.
기저는 round가 끝난 시점이며 madeResult와 result가 같은지 비교해줍니다.
총 round는 15이므로 시간복잡도는 3^15가 됩니다.
📔 정답출력
dfs함수 결과를 매 test case마다 형식에 맞게 출력해줍니다.
📕 Code
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
struct VS{
int home, away;
};
int result[10][10], madeResult[10][10];
vector <VS> vs;
int dfs(int played){
if(played == 15){
for(int i = 0; i < 6; i++){
for(int j = 0; j < 3; j++){
if(result[i][j] != madeResult[i][j]) return 0;
}
}
return 1;
}
int ans = 0;
int home = vs[played].home;
int away = vs[played].away;
//승패
madeResult[home][0]++; madeResult[away][2]++;
ans = max(ans,dfs(played + 1));
madeResult[home][0]--; madeResult[away][2]--;
//패승
madeResult[away][0]++; madeResult[home][2]++;
ans = max(ans,dfs(played + 1));
madeResult[away][0]--; madeResult[home][2]--;
//무무
madeResult[away][1]++; madeResult[home][1]++;
ans = max(ans,dfs(played + 1));
madeResult[away][1]--; madeResult[home][1]--;
return ans;
}
int main(){
fastio;
for(int i = 0; i < 6; i++){
for(int j = i + 1; j < 6; j++){
vs.push_back({i,j});
}
}
for(int t = 0; t < 4; t++){
memset(madeResult,0,sizeof(madeResult));
for(int i = 0; i < 6; i++){
for(int j = 0; j < 3; j++){
cin >> result[i][j];
}
}
cout << dfs(0) << ' ';
}
}
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Brute Force' 카테고리의 다른 글
(C++) - 백준(BOJ) 9081 : 단어 맞추기 (0) | 2022.06.28 |
---|---|
(C++) - 백준(BOJ) 15658 : 연산자 끼워넣기 (2) (0) | 2022.06.25 |
(C++) - 백준(BOJ) 14625 : 냉동식품 (0) | 2022.06.20 |
(C++) - 백준(BOJ) 9161 : Sir Bedavere’s Bogus Division Solutions (0) | 2022.06.16 |
(C++) - 백준(BOJ) 18409 : 母音を数える (Counting Vowels) (0) | 2022.06.15 |