[Level2] 24. 예상 대진표
96. 예상 대진표
function solution(n, a, b) {
let max = Math.log2(n);
let high = n;
let low = 0;
let middle;
while (1) {
middle = Math.floor((high + low) / 2);
if (a <= middle && b <= middle) {
high = middle;
max--;
} else if (a > middle && b > middle) {
low = middle + 1;
max--;
} else {
return max;
}
}
}
생각보다 쉽게 이진 검색을 해야한다는 것을 파악할 수 있었고 구현도 쉬웠다.!!
2단계 항상 주늑들어있어서 “1시간안에만 풀자”라는 마음가짐이었는데 쉽게 풀어서 기분이 너무 좋다.
다만 초반에 작은 값일 때만으로 while을 돌렸어서, 실패를 했었다!
32,30,32의 테스트케이스 결과가 5가 나오는 것을 보고 (원래는 1임) 중간보다 클 경우일때의 처리를 안했단 것을 알 수 있었다.
그 후부터는 순조롭게 코드 작성 완료!
로그 함수를 구하는 Math 함수인 Math.Log2 함수의 존재를 알게 됐다.
다음에도 또 써먹을 수 있도록 기억하자!
best 풀이
function solution(n,a,b)
{
let answer = 0;
while(a !== b) {
a = Math.ceil(a/2);
b = Math.ceil(b/2);
answer++;
}
return answer;
}
오우 짧디 짧고 깔끔하다……