2의 지수 승으로 주어지는 n -> 2의 제곱승찾기
항상 이긴다는 가정하에 주어지는 n을 반으로 나눠 왼쪽과 오른쪽으로 나눈다면 결국 오른쪽에있는경우는 해당 n의 제곱승이 나오기에 계속 잘라주면서 비교하는 방식으로 풀었다.
class Solution
{
public int solution(int n, int a, int b){
int answer = 0;
int count = 0;
int s = n;
for(int i=0; i<=n; i++){
if (s == 1){
break;
}
s = s/2;
count++;
}
for(int i = count ; i<=count; i--){
n = n/2;
if(n < b && n >=a || b<=n && n<a ){
answer = i;
break;
} else if(n <b && n<a){
b = b-n;
a = a-n;
}
}
return answer;
}
}
n | param1 | param2 | Return | |
---|---|---|---|---|
row1 | 8 | 6 | 8 | 2 |
row2 | 8 | 1 | 3 | 2 |
row3 | 16 | 11 | 15 | 3 |
row4 | 16 | 8 | 9 | 4 |
n을 반으로 나눴을 때 오른쪽에있는 경우
반으로 나눴을때 왼쪽에있 경우
반으로 나누고 오른쪽, 반으로 나누고 왼쪽에있는 경우
제곱승을 구하는 함수