본문 바로가기

프로그래머스

프로그래머스 LV 2 예상 대진표

728x90
import math

def solution(n,a,b):
    answer = int(math.log2(n));
    start = 0;
    end = n;
    while True :
        mid = (start + end) // 2;

        if a <= mid and b <= mid :
            end = mid;
            answer -= 1;
        elif a > mid and b > mid :
            start = mid;
            answer -= 1;
        else :
            return answer;

풀이 및 회고

대진표는 8강 4강 결승(2강) 이런식으로 /2 가 되는 것을 볼 수가 있습니다. 그래서 이분탐색으로 구현하려고 했습니다.
예를들어 4강인 대진표가 있으면 서로 반으로 나눠 반대쪽에 있으면 마지막 라운드에 만난다는 것을 가정하여 중간지점을 하나 두어 엇갈릴때 해당 라운드에 만나는것을 알 수 있습니다.

728x90