[Programmers]-예상 대진표
문제
A와 B가 몇번의 대진으로 만나는지 반환하면 되는 문제이다. 처음에는 대진을 배열에 받으면서 구해보려고했는데 N의 범위가 너무 커서 다른 계산방법이 있나 생각했다.
코드
class Solution
{
public int solution(int n, int a, int b)
{
double A = a;
double B = b;
if(a>b){
A = b;
B = a;
}
int count = 0;
while(true){
if(A+1==B && A%2==1){
count++;
return count;
}
A = Math.ceil(A/2);
B = Math.ceil(B/2);
count++;
}
}
}
코드 설명
a와b 크기가 뒤바뀔 수 있어서 if문으로 바꿔주게끔한다.
대진이 끝날때마다 순서가 a/2로 줄어든다.
여기서 홀수일 경우에를 대비해 Math.ceil()로 올림을 해준다.
또 break조건은 A가 홀수일때, 그리고 A는 B보다 수가 1적어야한다.
이유는 A가 4, B가 5일경우에는 대진이 잡히지 않아서 이기때문이다.
요약
- Math.ceil()는 올림이다.