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

지니·2021년 7월 24일
0

알고리즘

목록 보기
11/33

문제

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

문제 내용 요약

1번~8번 참가자가 있다고 가정해보자. (N=8)

1번 참가자 vs 2번 참가자
3번 참가자 vs 4번 참가자
5번 참가자 vs 6번 참가자
7번 참가자 vs 8번 참가자

이렇게 대결을 펼치고 각 대결의 승자는 순서대로 번호를 다시 부여받는다.

1번 참가자 vs 2번 참가자 => 승자는 1번 참가자가 된다.
3번 참가자 vs 4번 참가자 => 승자는 2번 참가자가 된다.
5번 참가자 vs 6번 참가자 => 승자는 3번 참가자가 된다.
7번 참가자 vs 8번 참가자 => 승자는 4번 참가자가 된다.

그리고 대결을 다시 펼친다.

1번 참가자 vs 2번 참가자
3번 참가자 vs 4번 참가자

이번 각 대결의 승자 또한 번호를 다시 부여받는다.

1번 참가자 vs 2번 참가자 => 승자는 1번 참가자가 된다.
3번 참가자 vs 4번 참가자 => 승자는 2번 참가자가 된다.

...

이렇게 반복된다.


코드

import java.util.*;

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 1;
        
        // a가 큰 쪽으로 기준 잡기
        if (a < b) {
            int tmp = a;
            a = b;
            b = tmp;
        }
        
        while (true) {
            if (a - b == 1 && b % 2 == 1) {
                break;
            }
            
            if (b > 1) {
                if (b % 2 == 1) {
                    b++;
                }
                
                b = b / 2;
            }
            
            if (a % 2 == 1) {
                a++;
            }
            
            a = a / 2;
        
            answer++;
        }

        return answer;
    }
}

간과했던 부분

처음에 while문을 다음과 같이 작성했었다.

while (a - b > 1) {
    if (b > 1) {
        if (b % 2 == 1) {
            b++;
        }
        b = b / 2;
    }
    if (a % 2 == 1) {
        a++;
    }
    a = a / 2;        
    answer++;
}

하지만 이렇게 작성해버리면 a = 3, b = 2가 들어가면,
기대 값 : 2
실제 값 : 1

...이렇게 나오게 된다. 두 수의 차가 1이라고 무조건 서로 겨루는 것은 아니기 때문이다.

profile
Coding Duck

0개의 댓글