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

hamsteak·2023년 9월 24일
0

ps

목록 보기
18/39

총 n명의 선수가 있는 토너먼트의 a번째 선수와 b번째 선수가 몇 번째 라운드에서 만나는지 찾아내야 하는 문제.

우선 총 라운드 수를 log2(n)으로 구하고 대진표의 결승전부터 탐색하도록 했다.

n을 절반으로 나눴을 때, a와 b가 서로 다른 구역에 있는지 여부를 통해 필요 라운드를 계산했다.

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

cpp code

#include <math.h>

using namespace std;

int solution(int n, int a, int b)
{
    int answer = log2(n);
    
    if (a > b) {int t=a;a=b;b=t;}
    
    while (!(a <= n/2 && b > n/2)) {
        answer--;
        if (a > n/2) {
            a -= n/2;
            b -= n/2;
        }
        n /= 2;
    }

    return answer;
}
profile
안녕하세요

0개의 댓글