알고리즘/프로그래머스 Level2

[프로그래머스,Java] Level2: 예상 대진표

류창 2021. 12. 1. 19:23
반응형

 

 

문제분석

 

주어지는 입력 :  A의 대진번호, B의 대진번호

 

구해야하는 값: A 와 B가 대진하게될 라운드를 구하기.

 

규칙: A,B는 만나기전까지 무조건 이기는것을 가정한다.

 

 

이 문제의 핵심은 규칙파악입니다.

 

규칙이 도대체 뭘까요?

 

1번과 2번이 대진을 벌여 이기면, 1번을 부여받고 다음 라운드로 진출합니다.

3번과 4번이 대진을 벌여 이기면, 2번을 부여받고 다음 라운드로 진출합니다.

5번과 6번이 대진을 벌여 이기면, 3번을 부여받고 다음 라운드로 진출합니다.

...

 

짝수번호/2 = 다음라운드에서 받게될 번호 라는걸 눈치채셧을겁니다.

 

홀수번호는 (홀수번호 +1) /2 = 다음라운드의 번호입니다.

 

 

이 형식을 반복하다, A와 B의 차이가 1이될경우 반복로직을 종료합니다.

 

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 1;
        if(a>b){
           int temp=a;
            a=b;
            b=temp;
        }
        
        for(int i=2;i<n;i*=2){
            if(a%2==1&&Math.abs(a-b)==1){
                break;
            }
            answer++;
            a=(a+1)/2;
            b=(b+1)/2;
        }
        return answer;
    }
}
cs
반응형