꼬꼬마 블로그

꼬꼬마의 기술 블로그

문제 설명

프로그래머스 레벨 2의 문제이며 2017 팁스다운 문제라고 합니다. 레벨 2에 비해 쉽다는 생각이 들었을 난이도지만 뒤에 있어서 그런지 현시점에서는 푼 사람이 많이 없었습니다.


문제는 간단했습니다. 모두가 아는 토너먼트형식의 게임에서 A, B 두사람이 어떤 라운드에 만나게 되는지 구하는 문제입니다.

 

 

제한사항을 보면 부전승도 없습니다.

입출력 예제에서 8명이 참여하고 4번째, 7번째 사람이 몇 라운드에서 만나는지 구하면

 

{ [ ( 1 2 ) ( 3 4 ) ] [ ( 5 6 ) ( 7 8 ) ] } 

 

마지막 {} 괄호에서 만나기 때문에 3번째입니다.

 

풀이

def solution(n, a, b):
    answer = 0

    a -= 1
    b -= 1

    while True:
        answer += 1

        if a // 2 == b // 2:
            return answer

        a = a // 2
        b = b // 2

    return answer

 

변수 설명

answer: 라운드입니다.

a: 선수A의 처음 번호입니다

b: 선수B의 처음 번호입니다

 

간단 설명 

먼저 2로 나눈 몫이 같다면 같은 해당 라운드에 만나게 됩니다. 하지만 이때 0과 1이 같은 라운드, 2와 3이 같은 라운드와 같이 계산이 되므로 a, b를 하나씩 빼 1은 0으로 2는 1로 만들어 줍니다.

 

그 후 a 와 b를 2로 나눈 값이 같아질 때까지 반복 후 answer을 반환합니다.