#include <iostream>
 
using namespace std;
 
int solution(int n, int a, int b)
{
    int answer = 0;
 
    if (a > b)
    {
        int iTemp = a;
        a = b;
        b = iTemp;
    }
 
    // 23 이라면 2/2 = 1 3/2 = 1
    // 34 이라면 3/2 = 1 4/2 = 2
    while (!(a + 1 == b) && (a /2 != b/2))
    {
        ++answer;
        a = (a + 1) / 2;
        b = (b + 1) / 2;
    }
 
    return answer;
}

처음에 내가 푼 답이다. 처음에는 음 괜찮게 풀은거 같다 라는 생각이 들었는데

두개 보고 나서 생각이 달라졌다.

#include <iostream>
 
using namespace std;
 
int solution(int n, int a, int b)
{
    a--;
    b--;
    int answer=0;
    while(a!=b){
        a=a/2;
        b=b/2;
        answer++;
    }
    return answer;
}

0을 맨 처음으로 만들고 12가 기준이 아니라 01 즉 /2 했을 때 같을때만 만들었다... 와 이건 진짜.. 깔끔 그자체...

#include <iostream>
 
using namespace std;
 
int solution(int n, int a, int b)
{
    int answer = 0;
 
    while (a != b) {
        a = (a + 1) >> 1;   // 2 1 1
        b = (b + 1) >> 1;   // 4 2 1
        ++answer;
    }
 
    return answer;
}

비트연산자... 역시 2로 나눌땐 비트연산자! 싶긴한데... 쓰라고 해야지 쓸 것같은데... 바로 딱 나오는 게 좀... 크...

+ Recent posts