개발 연습장/백준 문제풀이

[파이썬, Python] 백준 1057: 토너먼트

LooanCheong 2023. 6. 9. 10:27
반응형

문제

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

 

1057번: 토너먼트

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

www.acmicpc.net

코드

n, a, b = map(int, input().split())
cnt = 0

while True:
    cnt += 1
    if (a+1) // 2 == (b+1) // 2:
        print(cnt)
        break
    else:
        a = (a+1) // 2
        b = (b+1) // 2
n, a, b = map(int, input().split())
cnt = 0

while a != b:
    cnt += 1
    a -= a // 2
    b -= b // 2
    
print(cnt)

설명

1번 코드의 경우 직접 풀었던 방법이다.

문제의 조건에 둘이 만나지 않으면 -1을 출력하라고 되어있는데,
토너먼트에서 계속 이길 경우 만나지 않는 경우는 없으므로 생략했다.

따라서 라운드의 진행에 따라 참가자의 번호를 조정했다.

우선 라운드가 늘어나면 cnt를 1 늘리고,
만약 a+1을 2로 나눈 몫과 b+1을 2로 나눈 몫이 같다면(계산의 편의성을 위해 1을 더해줌)
cnt를 출력하고 break 해준다.

그렇지 않은 경우에는 참가자의 번호를 조정해 주었다.

 

2번 풀이의 경우 검색을 통해 간결하게 바꾼 풀이다.

a와 b가 같지 않을 경우
cnt를 1 늘려주고
a와 b의 번호를 조정해 준다.

반응형