본문 바로가기

⏳ 알고리즘/python 알고리즘 문제 풀이

프로그래머스 - LV2. 예상 대진표(2017 팁스타운)

문제

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

 

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

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

programmers.co.kr

 

코드

1) math이용

import math

def solution(n,a,b):
    exponent_n = int(math.log2(n))
    
    count = 1
    while count < exponent_n:
        a, b = math.ceil(a/2), math.ceil(b/2)
        if a == b:
            break
        else:
            count += 1
            
    return count 

2) math 이용 X

첫번째 방법에서 굳이 지수랑 ceil를 이용할 필요 없는거 같아 다시 해보니 훨씬 낫다.

def solution(n,a,b):
    count = 0
    while a != b:
        a, b = (a+1)//2, (b+1)//2
        count += 1
            
    return count

 

결과 비교

(L-1번결과, R-2번결과)