N

(SWEA c++)6808. 규영이와 인영이의 카드게임 본문

SW Expert Academy

(SWEA c++)6808. 규영이와 인영이의 카드게임

naeunchan 2020. 11. 20. 11:37
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWgv9va6HnkDFAW0&categoryId=AWgv9va6HnkDFAW0&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

참고 블로그

jksk0115.tistory.com/66

 

[D3] [6808] 규영이와 인영이의 카드게임

1. 설계 규영이가 내는 카드 순서는 고정 되어 있으므로 인영이가 낼 수 있는 카드의 모든 경우의 수(9!)를 확인하면 된다. 모든 경우의 수를 확인하는 일부 문제는 부분적으로 최적화가 가능한데

jksk0115.tistory.com

#include <iostream>
#include <vector>

using namespace std;

vector<int> m, y;
int win = 0, lose = 0;

void dfs(bool* picked, int turn, int mScore, int yScore)
{
    if(mScore > 85 || yScore > 85)
    {
        int remain =  1;
        
        for(int i = 9 - turn; i > 0; i--)
            remain *= i;
        
        if(mScore < yScore)
            lose += remain;
        else if(mScore > yScore)
            win += remain;
        
        return;
    }
    
    for(int i = 0; i < 9; i++)
    {
        if(!picked[i])
        {
            int score = m[turn] + y[i];
            
            picked[i] = true;
            
            if(m[turn] < y[i])
                dfs(picked, turn + 1, mScore, yScore + score);
            else
                dfs(picked, turn + 1, mScore + score, yScore);
            
            picked[i] = false;
        }
    }
}

int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int t;
    cin >> t;
    
    for(int tc = 1; tc <= t; tc++)
    { 
        bool check[19] = {0, }, picked[9] = {0, };
        win = 0, lose = 0;
        
        m.clear();
        y.clear();
        
        for(int i = 0; i < 9; i++)
        {
            int tmp;
            cin >> tmp;
            m.push_back(tmp);
            check[tmp] = true;
        }
        
        for(int i = 1; i < 19; i++)
        {
            if(!check[i])
                y.push_back(i);
        }
        
        dfs(picked, 0, 0, 0);
        cout << "#" << tc << " " << win << " " << lose << endl;
    }
    return 0;
}
728x90
반응형