간단히 몇번째 라운드에 만날 수 있는지를 판별하는 문제이다. 본인의 풀이는 같은 구역에 있는지 아닌지를 판별하는 풀이이다.
#include <cmath>
using namespace std;
int solution(int n, int a, int b) {
int answer = 0, base = n / 2;// base는 구간의 중심이다.
while (n != pow(2, answer))// 2의 몇 제곱인지 가 곧 최대 라운드이다.
answer++;
while (1) {
if ((a <= base && base < b) || (b <= base && base < a)) break;// 서로 다른 구역이라면
answer--;
if (a <= base) base -= pow(2, answer-1);// 같은 구역인데 base기준 왼쪽
else base += pow(2, answer-1);// 오른쪽
}
return answer;
}
더 간단한 풀이가 있는 것 같아서 참고한다.
#include <iostream>
using namespace std;
int solution(int n, int a, int b)
{
a--;
b--;
int answer=0;
while(a!=b){
a=a/2;
b=b/2;
answer++;
}
return answer;
}
소중한 정보 잘 봤습니다!