[프로그래머스] 메뉴 리뉴얼 - Java
- Game/프로그래머스
- 2021. 10. 26.
메뉴 리뉴얼 - 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의 결과가 나옵니다.
이 글은 아래의 링크에 대해 참조하였습니다.
제 것 보다 훨씬 간결하고 이해하기 쉽더라고요.
그래서 제 것이 아닌 남의 것을 포스팅 하게 되었습니다.
고수 풀이
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 |
---|