프로그래머스 2017 팁스타운 예상 대진표 [JAVA] - 22년 8월 15일

Denia·2022년 8월 15일
0

코딩테스트 준비

목록 보기
36/201
package com.company;

public class Solution {
    static public void main(String[] args) {
        Solution testSolution = new Solution();

        System.out.println(testSolution.solution(8,1,2));
        System.out.println(testSolution.solution(8,3,2));
        System.out.println(testSolution.solution(8,4,7));

    }

    public int solution(int n, int a, int b)
    {
        //처음에 바로 만나면 1라운드만에 만난 것
        int answer = 1;

        // while 문에서 조건을 비교하고 값을 변경할 변수, 처음에는 할당 받은 번호를 사용함
        int afterA = a;
        int afterB = b;

        //둘이서 승부를 하기 위해서는 바로 인접한 번호이여야 함 => Math.abs 를 사용하여 1 차이가 나는지 확인
        //그리고 두개가 1차이는 나지만 옆 조 인지 승부하는 번호인지 확인이 필요함
            //예를 들어) 2 , 3 번은 승부하는 번호가 아니고 서로 옆 조이다.
            // (1, 2) , (3, 4) 같은 케이스가 승부하는 번호
            // 승부하는 번호들로 확인해보면 두개가 2로 나눴을때 반드시 달라야 한다.
        while (!(Math.abs(afterA-afterB) == 1 && (afterA/2 != afterB/2))){
            // 승리하면 다음 라운드의 번호 지정 룰 => (현재 번호 + 1) / 2
                // 예를 들어 3번이 이기면 2번이 된다.
                // 그러므로 +1 하고 2로 정수 나누기를 하면 승리시 받을 번호가 됨.
            afterA = (afterA + 1) / 2;
            afterB = (afterB + 1) / 2;

            //다음 라운드 진출했으므로 결과에 +1를 해준다.
            answer++;
        }

        return answer;
    }
}

profile
HW -> FW -> Web

0개의 댓글