[프로그래머스/C++] 예상 대진표

최대 1 분 소요

1.문제 링크

예상 대진표



2. 풀이 전 계획과 생각

  • 구현



3. 풀이

#include <iostream>
#include<vector>
using namespace std;

int solution(int n, int a, int b)
{
    int round=0;
    vector<int> Game;
    vector<int> nextGame;
    for(int i=1;i<=n;i++) Game.push_back(i);

    while(1){
        bool check= false;
        round++;
        for(int i=0;i<Game.size();){
            if(i%2==0){
                if((Game[i]==a&&Game[i+1]==b)||(Game[i]==b&&Game[i+1]==a)) {
                    check= true;
                    break;
                }
                if(Game[i]==a || Game[i]==b){
                    nextGame.push_back(Game[i]);
                }
                else if(Game[i+1]==a || Game[i+1]==b){
                    nextGame.push_back(Game[i+1]);
                }
                else{
                    nextGame.push_back(Game[i+1]);
                }
                i+=2;
            }
        }
        if(check) break;

        Game.clear();
        for(int i=0;i<nextGame.size();i++) Game.push_back(nextGame[i]);
        nextGame.clear();
    }

    return round;
}

벡터를 2개씩 읽으면서 a나 b가 나오면 nextGame벡터에 넣고, 벡터를 2개씩 읽는 도중 동시에 a,b가 나오면 break문으로 while반복문을 빠져나온다.



4. 풀이하면서 고민했던 점



5. 문제를 풀고 알게된 개념 및 소감