[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()는 올림이다.