코드를 조금 복잡하게 짜게 됬다.
이분 탐색인줄 알았지만 그건 아니었던 걸로...nowline은 현재 대진표에 남아있는 사람의 절반을 나타내는 값이다.
그래서 nowline을 기준으로 a,b의 위치가 좌우에 있다면 반드시 현재 nowline의 지수의 값 +1 만큼의 round를 진행하게 된다.if(nowline>=a && nowline<b){ //딱 중간 answer = jisu+1; break; }
nowline보다 a,b가 둘다 작다면 nowline 이후의 값들은 필요가 없으니 버려준다.
else if(nowline>=a && nowline>=b){ nowline = nowline/2; jisu--; }
nowline보다 a,b가 둘다 크다면 nowline 이전의 값들은 필요가 없으니 버리는데
이경우 앞에 있는 자리로 떙겨줘야 하므로 a,b를 nowline만큼 뺴준다.else { //nowline <=a && nowline<=b a -= nowline; b -= nowline; nowline = nowline/2; jisu--; }
class Solution{
public int solution(int n, int a, int b){
int answer = 0;
int nowline = n/2;
int jisu = -1;
while(n!=1){
n = n/2;
jisu++;
}
//System.out.println(jisu);
//a<b로 만들어줌
if(a>b){
int temp = a;
a = b;
b= temp;
}
//System.out.println(nowline+" "+jisu);
while(true){
if(nowline>=a && nowline<b){
//딱 중간
answer = jisu+1;
break;
}else if(nowline>=a && nowline>=b){
nowline = nowline/2;
jisu--;
}else { //nowline <=a && nowline<=b
a -= nowline;
b -= nowline;
nowline = nowline/2;
jisu--;
}
}
return answer;
}
}