개발하는 kim-hasa

[c++][프로그래머스] 예상 대진표 본문

Algorithm/Programmers(c++)

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

kim-hasa 2021. 8. 24. 14:05

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

 

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

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

programmers.co.kr

가장 먼저 a와 b중에 어느것이 큰지를 구합니다.

 

다음 라운드로 갈때, 자기 번호에서 나누기 2를 한 후 반올림을 해서 구합니다. 그렇기 때문에 먼저 자기 점수에서 1을 뺀 후에 나누고 1을 더해주는 방식으로 다음 점수를 구합니다.

 

두 점수가 연속된 점수이며, 시작 점수가 홀수여야 맞붙습니다. 예를 들어서 1,2 는 다음 라운드에서 경쟁하지만 2,3 은 다음 라운드에서 맞붙지 않습니다. 다음 라운드에서 1,2 로 번호를 부여받고 나서야 경쟁합니다.

#include <iostream>

using namespace std;

int solution(int n, int a, int b)
{
    int answer = 0;
    
    if(a > b)
    {
        while(true)
        {
            if(b % 2 == 1 && a - b == 1)
            {
                answer++;
                return answer;
            }
            else
            {
                a = (a-1) / 2 + 1;
                b = (b-1) / 2 + 1;
                
                answer++;
            }
        }
    }
    else
    {
        while(true)
        {
            if(a % 2 == 1 && b - a == 1)
            {
                answer++;
                return answer;
            }
            else
            {
                a = (a-1) / 2 + 1;
                b = (b-1) / 2 + 1;
                
                answer++;
            }
        }
    }
}