[프로그래머스] 예상 대진표 (JAVA/자바)

·2021년 9월 16일
0

Algorithm

목록 보기
57/60

문제 링크


풀이

잘 생각해보면, 아주 쉽게 풀 수 있는 문제이다.

규칙을 생각해보자. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 된다.

즉, (자신의 번호 + 1) / 2 하면 이겼을 때 다시 부여받는 번호를 구할 수 있다!!

a와 b가 만나는 라운드는, 이겼을 때 올라가는 라운드가 같은 라운드인지를 확인하면 된다.


코드

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

        int round = 1;
        while(true){

	    // 이겼을 때 올라가는 라운드가 같은 라운드면
            if ((a + 1) / 2 == (b + 1) / 2) {
                break;
            }

            a = (a + 1) / 2;
            b = (b + 1) / 2;

            round ++;
        }

        return round;
    }
}

정리

난이도 : LEVEL 2

🤦‍♀️ 메모

  • 처음에는 a와 b의 번호의 차가 1이면 만난다고 생각해서 if(Math.abs(a-b)==1)와 같이 조건을 걸었는데, 총 4명의 참가자 중 a와 b가 2,3번을 부여받는다면 같은 라운드가 아니다. 그래서 이런 조건으로는 같은 라운드인지 구할 수 없다!

참고 사이트

딱히 없음

profile
당근먹고 자라나는 개발자

0개의 댓글