본문 바로가기

Programmers

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

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

A와 B가 몇 라운드에 붙게 되는가를 계산하는 문제.

문제 설명대로 전체 팀의 수 N은 2의 제곱으로 주어진다.

때문에 라운드를 진행할 때마다 전체 팀은 1번 부터 N/2번을 다시 배정 받아 절반씩 줄어든다.

A나 B가 홀수일 경우 A와 A+1, B와 B+1은 같이 게임을 진행하기 때문에 계산을 쉽게하기 위해 짝수로 맞춰주었다.

2를 계속 나누어주다가 같은 차례(같은 숫자)를 배정받을 경우 서로 붙게 되는것이기 때문에 while 문을 종료.

그때 까지의 라운드를 정답으로 출력!

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 0;

        while (a != b) {
            if (a % 2 != 0) a = a + 1;
            if (b % 2 != 0) b = b + 1;
            a = a / 2;
            b = b / 2;
            answer++;
        }
        return answer;
    }
}