[BOJ]백준#1057 Silver 3 토너먼트🤼‍♂️🤼‍♀️ (Python, 파이썬)

임준성·2022년 6월 25일
0

백준 Algorithm

목록 보기
33/59
post-thumbnail

백준 1057번
https://www.acmicpc.net/problem/1057

문제



후기

⏰ 풀이시간 30분 ++⏰

A와 B가 몇 번 째 라운드에 만나는 가에 대한 문제다.

우선 어떤 경우에 A와 B가 해당 라운드에 만나는 가에 대한 생각을 해보았다.

A가 3번에 배정받고, B가 4번에 배정받으면

(1,2) (3,4) (5,6) ... 이런식으로 대결이 이루어지기에 해당 라운드에 만난다.

그러나 A가 4번에 배정받고, B가 5번에 배정받으면

똑같이 1만큼 차이남에도 다른 대결이 발생하여 해당 라운드에 만나지 못한다.

그렇기에 "지민이가 홀수에 배정되어있고, 한수가 지민이보다 1만큼 크면 해당 라운드에 만난다."

라는 결과를 도출할 수 있었다.

이어서, A와 B가 다음 라운드에 몇번의 번호를 받게 되는지에 대한 구현만 하면 정답을

얻을 수 있었다.

나의 풀이

import sys
input= sys.stdin.readline

N, A, B = map(int,input().split()) #참가자수, 김지민, 임한수번호
cnt = 1 #라운드
# 무조건 이기기때문에 아무리 늦어도 결승에서 만나기 때문에 만나지 않을 상황은 없기에 -1에대한 계산은 할필요없다.
if A> B:
    (A,B) = (B,A)
while True:

    if (A%2==1 and A+1==B): #지민이가 홀수에 배정되어있고, 한수가 지민이보다 1만큼 크다면, 해당 라운드에 맞붙게된다.
        print(cnt)
        exit()

    if A%2== 1: #홀수번이면 다음라운드의 번호는 (A+1)/2가된다. 
        A = ((A+1)/2)
    elif A%2 ==0: #짝수번이면 다음라운드의 번호는 (A/2)다
        A = (A/2)
    if B%2== 1: #마찬가지
        B = ((B+1)/2)
    elif B%2 ==0:
        B = (B/2)

    cnt +=1
profile
아무띵크 있이

0개의 댓글