문제 링크
예상 대진표
풀이
- 먼저
a
와 b
를 정렬한다.
- 라운드를 넘어갈 때
2
로 나누어주면 자신의 번호를 구할 수 있다.
2-1. 나누어 떨어지지 않는다면 그 다음 번호를 배정받기 때문에 +1
해준다.
- 이제 이거를
a
와 b
가 만날 때 까지 해주면서 answer++
를 한다.
3-1. 만나는 것의 판정은 a+1==b
가 될 때, 그래서 1번 과정을 해주었다.
3-2. 그리고 a
가 홀수 일 때. a
가 짝수여서 a=2
, b=3
이러면 그 라운드에서 a
와 b
는 만날 수 없다.
코드
#include <iostream>
using namespace std;
int solution(int n, int a, int b)
{
int answer = 1;
if(a>b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
while(a+1!=b || a%2!=1)
{
if(a%2==1) a = a/2+1;
else a = a/2;
if(b%2==1) b= b/2+1;
else b = b/2;
answer++;
}
return answer;
}