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

nnm·2020년 4월 14일
0

프로그래머스 예상 대진표

문제풀이

주어진 조건대로 직접 경기를 진행해보는 것 밖에 떠오르지 않는다. 그래서 직접 진행해보았다. 그런데 경기를 어떻게 진행할 것인가?

  • 일단 A, B가 경기를 치룰때 까지 경기가 지속되어야 한다.
    • 반복문으로 경기를 진행하되 A, B가 경기에서 만나는 것을 탈출조건으로 한다.
    • A, B는 만날 때까지 계속 이기므로 결국 만난다. 그 때 숫자가 작은 쪽이 홀수이며 둘의 차이가 1이어야 만난 것이다.
    • 처음에 A, B중 큰 숫자와 작은 숫자를 구분해놓고 계속 업데이트 한다.
  • 각 라운드에서 승자가 다음 라운드에서 가지는 번호는 어떻게 되는가?
    • 토너먼트 경기에 부전승이 없는 구조이니 한 라운드에 참가자가 반 씩 줄어든다.
    • (현재 자신의 번호 + 1) / 2가 다음 라운드에서의 번호다.

구현코드

import java.util.*;

class Solution {
    public int solution(int n, int a, int b){
        int answer = 1;
        int left = 0;
        int right = 0;
        
        if(a > b){
            left = b;
            right = a;
        } else {
            left = a;
            right = b;
        }
        
        while(true){
            if(left % 2 != 0 && right - left == 1){
                break;
            }
            
            left = (left + 1) / 2;
            right = (right + 1) / 2;
            answer++;
        }

        return answer;
    }
}
profile
그냥 개발자

0개의 댓글