본문 바로가기

백준 문제풀이

1057번: 토너먼트 / silver 4 / 브루트포스

https://www.acmicpc.net/problem/1057

 

1057번: 토너먼트

김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를

www.acmicpc.net

'''
1057번: 토너먼트 / silver 4 / 브루트포스 
'''


# A, B 친구가 같은 라운드에서 경기하는지 확인하는 함수
def check_round(div, N, A, B):
    A -= 1
    B -= 1
    if A // div == B // div:
        return True
    return False

    return False


# 참가자 수 N, 친구 둘 A, B 입력받기
N, A, B = map(int, input().split())
round = 1
div = 2
while True:
    if check_round(div, N, A, B) == True:
        break
    div *= 2
    round += 1
# round 출력
print(round)

코드 리뷰

- 토너먼트 경기에서 A, B 친구가 몇라운드때 대결을 하는지 확인하는 문제입니다.

 

- 저는 div를 활용하여 A, B 친구가 대결을 하는지 확인했습니다.

- round 변수와 div 변수는 상관관계를 가지고 있게 설정했습니다.

    EX) round = 1, 2, 3, 4, ... / div = 2, 4, 8, 16, ... 

- div 는 전체 플레이어를 몇명씩 나눌것인가를 나타냅니다.

- div = 2 일때 2명씩 플레이어를 나누고, div= 4 일때 4명씩 플레이어를 나눕니다.

- 따라서 div = 2 일때, (1,2 / 3,4 / 5,6 / ...) 플레이어를 나누고 / div = 4 일때, (1,2,3,4 / 5,6,7,8 / ...) 플레이어를 나눕니다.