본문 바로가기
반응형
Algorithm

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

by brightGarden02 2023. 9. 19.

* 순서

- 문제

- 문제 설명

- 문제 목표

- 문제 풀이

- 최종 코드

- 포인트

- 다른 사람 코드

 

 

- 문제

 

 

- 문제 설명

토너먼트 문제이다. 2명씩 짝을 지어 경기를 하며 참가자 번호가 계속 바뀐다.

선수 A, B는 계속 이긴다.

 

 

- 문제 목표

선수 A, B가 서로 경기할 때의 라운드를 구하면 된다.

 

 

- 문제 풀이

1. 1라운드부터 시작하지만 0라운드라고 했을 경우 +1씩 라운드가 같아질 때까지 구하면 된다.

2. 선수번호가 계속 바뀌므로 함수를 이용한다.

3. 짝수일 경우, 몫이 선수 번호가 된다.

4. 홀수일 경우, (몫 + 1) 이 선수 번호가 된다.

 

 

- 최종 코드

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

        //1. 1라운드부터 시작하지만 0라운드라고 했을 경우 +1씩 라운드가 같아질 때까지 구하면 된다.
        while(a != b) {
            //2. 선수 번호가 계속 바뀌므로 함수를 이용한다.
            a = numberParticipant(a);
            b = numberParticipant(b);

            answer++;
        }
        return answer;
    }

    private static int numberParticipant(int x) {
        //3. 짝수일 경우, 몫이 선수 번호가 된다.
        if(x % 2 == 0) {
            x = x / 2;
        }//4. 홀수일 경우, (몫 + 1) 이 선수 번호가 된다.
        else {
            x = x / 2 + 1;
        }
        return x;
    }

 

 

- 포인트

주어진 값(선수 번호)아 짝수, 홀수일 때의 관계를 이용한다.

 

 

- 다른 사람 코드

나누기에서의 몫과 나머지의 합이 다음 선수 번호가 된다는 관계식을 이용하였다.

public static int solution(int n, int a, int b)
    {
        int answer = 0;
        while(true) {
            a = a / 2 + a % 2;
            b = b / 2 + b % 2;
            answer++;
            if(a == b) {
                break;
            }
        }
        return answer;
    }

 

 

댓글


반응형
반응형