Python/프로그래머스

예상 대진

룰루랄라룰루랄라 2024. 3. 25. 21:57

N 명이 참가하는 게임 토너먼트가 개최 되었다

대진 방법은 1-2번 3-4번... N-1번 - N번 식으로 짝을 지어 대진 한다

1-2에서 1이 이기고 3-4 에서 4가 이기면 1은 1번, 4는 2번 이런식으로 다시 번호를 매긴다고 한다

처음 라운드에서 A번 참가자가 경쟁자로 생각하는 B 번 참가자를 몇 라운드에서 만날지 궁금하다고 한다..

만날때까지 A,B 는 계속 이긴다는 것을 전제로 한다!

N 은 2의 지수 승으로 주어져서 부전승은 없다!

 

대진 방법을 보면.. 

두명씩 순서대로 짝을 짓는다

결국 계속 이긴다면 내 번호는 계속 /2 가 되는 것이라는게 보였다!

 

그리고.. A,B 가 만나는 경우는 번호가 1이 차이가 나면서도 2번 3번 이런식은 안되고

큰 번호가 짝수이고 작은 번호가 홀수인 경우면 된다!

 

그래서 최종 코드는..~

import math

def solution(n,a,b):
    c=1
    while True:
        if max(a,b)%2==0 and (max(a,b)-1)==min(a,b):
            break

        a = math.ceil(a/2)
        b = math.ceil(b/2)

        c+=1
    return c

완전 간단하다..!

 

그리고 처음에 round 함수를 썼다가 틀렸었는데 round 는 "오사오입" 방식이라 안된다!

오사오입 방식은 소수점 첫째자리가 5 라면, 앞의 수가 짝수면 소수점을 버리고 홀수면 올린다!

이건 항상 주의해야 할 듯!

 

 

 

출처 : https://school.programmers.co.kr/learn/challenges

'Python > 프로그래머스' 카테고리의 다른 글

연속 부분 수열 합의 개수  (1) 2024.03.25
귤 고르기  (0) 2024.03.25
구명보트  (0) 2024.03.25
카펫  (0) 2024.03.25
피보나치 수  (0) 2024.03.25