1057. 토너먼트
브루트포스 알고리즘
1) 나만의 방식
대전한 사람의 범위를 생각 => 2명, 4명, 8명....
대전횟수 = n, 임의의 값 K (n, K는 자연수)
김지민(A)과 임한수(B) 중 김지민의 번호가 크다고 할 때,
김지민의 대전 상대 범위: (K-1)(2^n) < A <= K(2^n)
만났다 = (K-1)(2^n) < B < A <= K(2^n)
2) 다른 사람 방식
홀수 = 다음사람이랑 경기
짝수 = 전사람이랑 경기(나머지는 버려짐)
kim = (kim + 1) / 2;
im = (im + 1) / 2;
kim == im (만남)
int max = Math.max(kim,im);
int min = Math.min(kim,im);
if (max%2 != 0)
max++;
int count = 0;
int divide = 2;
if (max != min) {
count++;
while (max-divide >= min) {
divide *= 2;
if (max%divide != 0)
max = max + divide - max%divide;
count++;
}
}
int count = 0;
do{
count++;
kim = (kim + 1) / 2;
im = (im + 1) / 2;
}while(kim == im)
1059. 좋은 구간