프로그래머스 예상 대진표 코드 및 해설 (파이썬)

2021. 6. 1. 15:35algorithm

반응형

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

 

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

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

programmers.co.kr

 

answer에 a,b가 만나는 라운드의 번호를 저장합니다. 처음엔 1로 초기화합니다.
check_if_meet 함수를 통해 현재 라운드에서 a,b가 만나는지 확인합니다. a,b가 만나려면 둘의 차가 1이고 둘 중 더 큰 값이 짝수여야 합니다.
next_num 함수는 현재 선수의 번호를 받으면, 다음 라운드에 이 선수에게 주어질 번호를 반환합니다.

a,b가 check_if_meet에서 True를 반환할 때까지 a,b를 다음 라운드의 번호로 갱신하고 answer를 1씩 증가시킵니다.

 

# a,b 참가자가 현재 라운드에서 만나면 True, 아니면 False 
# 둘의 차가 1이고, 큰 값이 짝수여야 만남 
def check_if_meet(a,b):
    if abs(a-b) == 1 and max(a,b) % 2 == 0:
        return True
    
    return False 

# 다음 라운드에 배정되는 번호를 반환함
def next_num(player):
    # 짝수면 현재 번호를 2로 나눈 값
    if player % 2 == 0:
        return player // 2 
    # 홀수면 (현재 번호 + 1)을 2로 나눈 값 
    else:
        return (player+1)//2 

def solution(n,a,b):
    # a,b가 만나는 라운드의 번호 
    answer = 1
    
    # 현재 라운드에서 만나면 while문 탈출 
    while not check_if_meet(a,b):
        # 다음 라운드의 번호로 갱신 
        a = next_num(a)
        b = next_num(b)
        # 라운드 번호 +1 
        answer += 1 
            
    return answer 

반응형