본문 바로가기

알고리즘

파이썬) 토너먼트

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

 

n, kim, im = map(int, input().split())

if n % 2 == 1:
    n += 1

if kim % 2 == 1:
    kim += 1

if im % 2 == 1:
    im += 1


cnt = 1

while True:
    if kim % 2 == 1:
        kim += 1

    if im % 2 == 1:
        im += 1
    if kim // 2 == im // 2:
        # print(kim, im)
        break

    kim = kim // 2
    # 8 4 2 1
    im = im // 2
    #  9 5 3 2
    cnt += 1


print(cnt)

우선 어떻게 풀지 생각하는데 10분정도 소요되고 코드를 작성하는데 5분정도 걸린것 같다.

내가 생각한 것은

1. 어떻게 김지민과 임한수를 다음 라운드에 진출 시킬 것인가

2. 둘이 어떤 라운드에서 만났다는 것을 어떻게 확인할 것인가.

그러나 방법은 굉장히 쉬웠다

김지민의 순서가 홀수라면 +1로 짝수로 맞춰주고 임한수 역시 홀수라면 +1을 해주었다.

그에 2로 나누면 다음 라운드의 김지민과 임한수의 순서를 구할 수 있다.

또한, 그 다음 라운드의 김지민의 순서가 홀수라면 +1, 임한수 역시 홀수라면 +1을 해주고,

둘이 2로 나누면 다음 라운드의 둘의 순서를 구하는데, 둘이 2로 나눈 숫자가 같다면 같은 라운드에서 만났다는 것이므로 while문을 탈출하게 된다.

 

역시 정답률 57퍼센트의 문제답게 굉장히 쉬웠다..

'알고리즘' 카테고리의 다른 글

파이썬)안전영역 BOJ-2468  (0) 2023.07.31
파이썬)뒤집기  (0) 2023.07.30
파이썬)수들의 합  (0) 2023.07.26
파이썬)K번째 수  (0) 2023.07.20
파이썬)미로 탈출  (0) 2023.07.14