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