💡Problem Solving/Programmers

[프로그래머스] 예상 대진표 (Java)

gom20 2021. 10. 21. 21:19

#문제

https://programmers.co.kr/learn/courses/30/lessons/12985#

 

코딩테스트 연습 - 예상 대진표

△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N

programmers.co.kr


#풀이

번호 간격이 1이더라도 해당 라운드에서 대진하지 않을 가능성이 있다.

예를 들어 아래 4, 5번 선수는 3라운드에서야 만날 수 있다. 

1) a와 b의 차이가 1을 초과할 경우 번호를 다시 매긴다. 

2) 차이가 1이여도 a와 b를 각각 2로 나눈 몫이 같을 경우 번호를 다시 매긴다. 

1 2
1 2 3 4
1 2 3 4 5 6 7 8

 

#소스코드

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 1;
        
        
        while(Math.abs(a-b) > 1 || (Math.abs(a-b) == 1 && a/2 == b/2)){
            if(a%2==1) a++;
            if(b%2==1) b++;
            a=a/2;
            b=b/2;
            answer++;
        }
       
        
        return answer;
    }
}