본문 바로가기

PS

[Programmers]LV2 - 예상대진표

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

 

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

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

programmers.co.kr

입출력 예와 설명

문제를 읽으며 30~40분 정도 고민하다 보니

 

번호가 짝수 일 경우에는 번호 / 2 가 다음 라운드의 자기 숫자가 되고

번호가 홀수 일 경우에는 번호 / 2 +1이 다음 라운드의 자기가 숫자가 된다.

항상 이긴다고 가정했으므로 인원이 반으로 줄어들며 번호가 새로 매겨지다가 결국 같은 번호가 되는 시점이 A와 B가 붙게 되는 라운드라고 판단했다.

 

더보기
import java.util.*;
class Solution
{
    public int solution(int n, int a, int b)
    {
        //최대 N/2번까지 대회 
        int max = Math.max(a,b);
        int min = Math.min(a,b);
        
        boolean init = true;
        int cnt = 0;
        int num1;
        int num2;        
        
        num1 = divide(max);
        num2 = divide(min);
        
        if(num1 == num2){
            cnt++;
            init = false;
        }
        
        while(init)
        {
          max = divide(max);
          min = divide(min);
          cnt++;
          if((max == min)){
              break;
          }
          //  System.out.println("min: "+min+" max: " + max);
        }
        
        return cnt;
    }
    public static int divide(int num){
        if(num% 2 ==0){
            return num/2;
        }
        else{
            return num/2 +1;
        }
    }
}

max와 min은  서로 대소가 바뀌어서 주어질 경우를 생각해서 사용한 건데 지금 생각해보니 의미 없는 것 같다..

 

개인적인 정리이므로 지적과 틀린 부분은 알려주시면 감사하겠습니다.

 

 

'PS' 카테고리의 다른 글

[BOJ]16234번: 인구 이동  (0) 2021.06.16
[Programmers] LV2 - 게임 맵 최단거리  (0) 2021.06.16
[BOJ]17144번 : 미세먼지 안녕!  (0) 2021.06.14
[BOJ] 1958번: LCS 3  (0) 2021.06.03
[BOJ] 1145번 : 적어도 대부분의 배수  (0) 2017.06.23