라이벌을 만나는 라운드를 구하는 문제이다.
def solution(n,a,b): answer = 1 while True : if a % 2 == 0 and a - 1 == b or a % 2 != 0 and a + 1 == b : break if a % 2 == 1 : a = (a+1)//2 elif a % 2 == 0 : a = a//2 if b % 2 == 1 : b = (b+1)//2 elif b % 2 == 0 : b = b//2 answer += 1 return answer
- 첫번째
if
- a가 짝수일 경우에는 b가 a의 -1일 경우에 둘이 만나게 되기 때문에
break
- ex) a = 2, b = 1- a가 홀수일 경우에는 b가 a의 +1일 경우에 둘이 만나게 되기 때문에
break
- ex) a = 1, b = 2- 이하의 조건문은 주어진 토너먼트가 진행되기 위한 계산
def solution(n,a,b): answer = 1 while True : if abs(a - b) == 1 : break else : if a % 2 == 1 : a = (a+1)//2 elif a % 2 == 0 : a = a//2 if b % 2 == 1 : b = (b+1)//2 elif b % 2 == 0 : b = b//2 answer += 1 return answer
의미있는 코드라고 생각해서 공유한다.
1. 두 수의 차이가 1이라면 둘이 만나는 라운드가 되기에while
문을 끝낸다.
2. 두수의 차가 1이 아니라면 아직 둘이 만나지 않았기 때문에 연산을 진행하고, 라운드를 1회로 진행한다.이 코드가 오답인 이유
- 오답이 뜬 후에 질문하기에 들어가서 테스트케이스를 보니
- n = 8, a = 4, b = 5인 경우를 알려주었다.
- 이 경우 위의 코드는 1을 주지만 정답은 3이다.
오랜만에 스스로 푼 문제라서 기분이 좋았다. 참고 없이 머리를 쥐어짜내는 느낌으로 계속 풀어갔으면 좋겠다.