[프로그래머스] 메뉴 리뉴얼 - 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