[프로그래머스/Java] Lv.2 예상 대진표

이은정·2024년 9월 29일

프로그래머스/Java

목록 보기
46/74

문제

로직

참가자의 수는 무조건 2의 지수이다.
참가자의 수를 반으로 나누었을 때 A와 B가 다른 묶음에 속한다면 참가자의 수의 2의 지수 값이 정답이다.
예를 들어, 위의 예와 동일하게 8명의 참가자가 존재하고, A와 B가 각각 4와 7이라고 가정하자.
8을 2로 나누었을 때, A는 4 이하이고 B는 5 이상이다.
A와 B가 다른 묶음에 속하기 때문에 8의 2의 지숫값인 3이 정답이다.

주어진 N을 2로 나누면서 아래 조건문을 반복한다.
A와 B가 다른 묶음에 속한다면 N이 1일 될 때까지 2로 나누고 나누어진 횟수를 return 한다.
만약 A와 B가 동일한 묶음에 속한다면 N을 2로 나눈다.
이 때, A와 B가 모두 N/2보다 크다면 A와 B 모두 N/2 값을 빼준다.

코드

class Solution
{
    public int solution(int n, int a, int b)
    {

        while (n > 1) {
            if ((a <= n/2 && b > n/2) || (a > n/2 && b <= n/2)) {
                int num = 0;
                for (; n > 1; n /= 2) {
                    num ++;
                }
                return num;
            }
            else if (a > n/2 & b > n/2) {
                a -= n/2;
                b -= n/2;
            }
            
            n /= 2;
        }

        return n;
    }
}

결과

profile
돈 많은 백수가 꿈인 백엔드 개발자 지망생

0개의 댓글