알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 2017팁스타운 - 예상 대진표

HRuler 2020. 11. 29. 18:21

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/12985?language=java

 

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

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

programmers.co.kr

2. 나의 풀이

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 1;
        int big = b;
        int small = a;
        if(a > b) {
        	big = a;
        	small = b;
        }
        while(true) {
        	if(big - small == 1 && small % 2 == 1) {
        		break;
        	}
        	if(small % 2 == 1) {
        		small = (small + 1) / 2;
        	}else {
        		small = small / 2;
        	}
        	
        	if(big % 2 == 1) {
        		big = (big + 1) / 2;
        	}else {
        		big = big / 2;
        	}
        	//System.out.println("a : " + a + ", b : " + b);
        	answer += 1;
        }

        return answer;
    }
}

3. 다른 사람 풀이

class Solution
{
    public int solution(int n, int a, int b)
    {
        return Integer.toBinaryString((a-1)^(b-1)).length();
    }
}