-
반응형
https://www.acmicpc.net/problem/6987
6987번: 월드컵
월드컵 조별 최종 예선에서는 6개국으로 구성된 각 조별로 동일한 조에 소속된 국가들과 한 번씩, 각 국가별로 총 5번의 경기를 치른다. 조별리그가 끝난 후, 기자가 보내온 각 나라의 승, 무승부
www.acmicpc.net
풀이
매칭이 되었을때, A팀 WIN, B팀 LOSE / A,B팀 DRAW / A팀 LOSE B팀 WIN 인 경우를 각각 고려해주며, 모든 경기를 완전탐색한 뒤, 입력받았던 4가지 경우와 비교하여 일치하는것이 있으면, 해당 INDEX의 RESULT값을 1로 바꾸어준다.
초반에 계속 틀렸는데, 틀린 이유가 4가지 경우가 모두 다른 입력인줄알고 풀었다. 4가지경우 모두 같은 입력이 들어올 경우를 생각해주며 코드를 짜면된다.
코드
#include <iostream> #include<algorithm> using namespace std; int team[6][3] = { 0 };//매순간 상태를 저장하는 배열 int arr[4][6][3];//입력받은거 저장하는 배열 int result[4] = { 0 };//결과 저장 배열 //매칭되는 경우를 모두 저장 pair<int, int> game[15] = { {0,1},{0,2},{0,3},{0,4},{0,5},{1,2},{1,3},{1,4},{1,5},{2,3},{2,4},{2,5},{3,4},{3,5},{4,5} }; void dfs(int cnt) { //6명이서 토너먼트하면 총 15게임을 함 if (cnt == 15) { //비교 for (int k = 0; k < 4; k++) { bool flag = true; for (int i = 0; i < 6; i++) { for (int j = 0; j < 3; j++) { if (team[i][j] != arr[k][i][j]) { flag = false; break; } } if (!flag) break; } if (flag) { result[k] = 1; } } return; } //i팀과 j팀의 경기 int i = game[cnt].first; int j = game[cnt].second; //승 team[i][0]++; team[j][2]++; dfs(cnt + 1); team[i][0]--; team[j][2]--; //무승부 team[i][1]++; team[j][1]++; dfs(cnt + 1); team[i][1]--; team[j][1]--; //패 team[i][2]++; team[j][0]++; dfs(cnt + 1); team[i][2]--; team[j][0]--; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for (int k = 0; k < 4; k++) { for (int i = 0; i < 6; i++) { for (int j = 0; j < 3; j++) { cin >> arr[k][i][j]; } } } dfs(0); for (int ret:result) { cout << ret << " "; } return 0; }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 1306번 달려라 홍준 (0) 2021.08.16 [백준OJ] 20114번 미아 노트 (0) 2021.08.15 [백준OJ] 9019번 DSLR (0) 2021.08.13 [백준OJ] 14476번 최대공약수 하나 빼기 (0) 2021.08.12 [백준OJ] 9079번 동전 게임 (0) 2021.08.11 댓글