[프로그래머스] 메뉴 리뉴얼 - Java

    메뉴 리뉴얼 - Java

     

     

     

     

      문제

     

     

      문제 해석

     이 문제에 관해서는 토너먼트에 대해 이해를 하신다면 쉽게 풀 수 있습니다.

    토너먼트가 진행했을 때 좌측팀과 우측팀의 경기인데, 결국 홀수팀과 짝수팀의 경쟁입니다.

     

    1라운드

    1vs2, 3vs4, 5vs6, 7vs8 등...

     

    2라운드

    1vs2, 3vs4.

     

    결국, 좌측은 홀수여야 하고 우측은 짝수라는 의미를 갖습니다.

    두 번째, 서로 맞붙기 위해서는 둘의 차이가 1이어야 한다는 점 입니다.

     

     

    즉, 2개의 조건을 맞춘다면 풀이가 쉽게 해석이 됩니다.

    if(left % 2 != 0 && right - left == 1){
         break;
    }

    토너먼트의 종료 조건 2가지를 충족했을 때, 멈출 수 있도록 if문의 조건을 걸어 줍니다.

    그리고 이 조건이 될 떄 까지, 문제처럼 진행을 합니다.

     

    while(true){
    
    if(left % 2 != 0 && right - left == 1){
    break;
    }
    
    left = (left + 1) / 2;
    right = (right + 1) / 2;
    answer++;
    
    }

    Java의 int 특성을 활용하여 +1을 하고 2로 나눕니다.

    이제 여기서 중요한 점, 우측은 반드시 큰 수여야한다는 것 입니다.

     

    public int solution(int n, int a, int b){
            int answer = 1;
            int left = 0;
            int right = 0;
            
            if(a > b){
                left = b;
                right = a;
            } else {
                left = a;
                right = b;
            }
            
            while(true){
    
            	if(left % 2 != 0 && right - left == 1){
                    break;
                }
                
                left = (left + 1) / 2;
                right = (right + 1) / 2;
                answer++;
                
            }
    
            return answer;
        }

      이 모든 조건을 충족 할 경우, answer의 결과가 나옵니다.

     

    이 글은 아래의 링크에 대해 참조하였습니다.

    https://velog.io/@hyeon930/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%98%88%EC%83%81-%EB%8C%80%EC%A7%84%ED%91%9C-Java

     

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

    프로그래머스 예상 대진표주어진 조건대로 직접 경기를 진행해보는 것 밖에 떠오르지 않는다. 그래서 직접 진행해보았다. 그런데 경기를 어떻게 진행할 것인가?일단 A, B가 경기를 치룰때 까지

    velog.io

     

    제 것 보다 훨씬 간결하고 이해하기 쉽더라고요.

    그래서 제 것이 아닌 남의 것을 포스팅 하게 되었습니다.

     

     

      고수 풀이

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

     다 필요 없고 XOR 방식을 활용하였습니다.

     

    4-1  : 011

    7 -1 : 110

     

    XOR의 값 : 101

    XOR의 length의 길이 : 3.

     

    XOR을 활용하여 쉽게 문제를 푸는 것을 보니, 갈 길은 아주 먼 것 같습니다.

    반응형

    'Game > 프로그래머스' 카테고리의 다른 글

    [프로그래머스]Java - 짝지어 제거하기  (0) 2021.10.07

    댓글

    Designed by JB FACTORY