안녕하세요 :)
https://programmers.co.kr/learn/courses/30/lessons/12985
프로그래머스 예상 대진표 문제입니다.
풀이
a와 b의 차이가 1이면 서로 붙게 되므로 return하면 됩니다.
여기서, 주의할 점은 단순히 1차이 나면 되는게 아니라
1 2 또는 3 4 이렇게 붙게되어야 한다는 점입니다.
2 3 이라면 서로 붙게되는 경우가 아닙니다 !
(2와 3이라면 1 2 / 3 4 승패 결정되고 나서 1 2로 붙게되어야 정답이됨)
즉, a와 b가 1만큼 차이나면서 둘 중 작은 값이 '홀수'여야만 서로 붙게되는 경우가 됩니다.
def solution(n,a,b):
round = 1
while True:
if abs(a-b) == 1 and min(a, b) % 2 == 1:
break
round += 1
if a % 2 == 1:
a += 1
if b % 2 == 1:
b += 1
a //= 2
b //= 2
return round