코딩테스트

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

이쿠우우 2022. 3. 25. 17:08
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/12985

 

코딩테스트 연습 - 예상 대진표

△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N

programmers.co.kr

 

글쓴이의 답

개인적인 풀이 임으로

이것보다 더 좋은 알고리즘은 많음...

이렇게도 풀이하는구나.. 공유하기 위해 올림...

 

#include <iostream>
#include <vector>
#include <utility>

using namespace std;

int findResult(vector<pair<int, int>> map, int &a, int &b, int &answer, bool &result){
    answer++;
    if(true == result){
        return 0;
    }
    
    vector<pair<int, int>> nextMap;
    int num1;
    int num2;  
    for(int i=0; i < map.size(); i++){
        if(((a == map[i].first) && (b == map[i].second)) || ((b == map[i].first) && (a == map[i].second))) {
            result = true;
            return 0;
        }
        int find = 0;
        if((a == map[i].first) || (a == map[i].second)){
            find = a;
        }
        else if((b == map[i].first) || (b == map[i].second)){
            find = b;
        }
        else{
            find = map[i].first;
        }
        
        if(0 == i%2){
            num1 = find;
        }
        else{
            num2 = find;
            pair<int, int> temp = make_pair(num1, num2);
            nextMap.push_back(temp);
        }               
    }
    
    findResult(nextMap, a, b, answer, result);
    
    return 0;
}

int solution(int n, int a, int b)
{
    int answer = 0;
    
    vector<pair<int, int>> map;
    for(int i=1; i <= n; i+=2){
        pair<int ,int> temp = make_pair(i, i+1);
        map.push_back(temp);
    }
    
    bool result = false;
    findResult(map, a, b, answer, result);    

    return answer;
}



꾸준히 하다보면 실력이 늘겠지..

반응형