본문 바로가기

PS/프로그래머스

[프로그래머스 LV 2] 예상 대진표 파이썬/python

728x90

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

 

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

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

programmers.co.kr

 

주석보고 이해할수있음

차이가 1일경우 대진가능

하지만 이때에도 둘중 작은수가 홀수여야지 대진이가능

 

다른사람의 풀이 보면 온갖 서커스가 난무하는 재밌는문제

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def solution(n, a, b):
    answer = 1
    small = min(a, b)
    big = max(a, b)
    while (1):
        # 대결할 수 있으면 대결시키킴
        # 차이가 1이면서 홀수인수가 짝수인 수보다 더 작아야 싸움 가능
        if big - small == 1 and small % 2 == 1:
            break
        else:
            if small % 2 == 1:  # 홀수일경우
                small = int(small / 2+ 1
            else:
                small = small / 2
            if big % 2 == 1:  # 홀수일경우
                big = int(big / 2+ 1
            else:
                big = big / 2
            answer += 1
 
    return answer
 
cs
728x90