C++:: 프로그래머스 < 예상 대진표 >

jahlee·2023년 7월 20일
0

프로그래머스_Lv.2

목록 보기
80/106
post-thumbnail

간단히 몇번째 라운드에 만날 수 있는지를 판별하는 문제이다. 본인의 풀이는 같은 구역에 있는지 아닌지를 판별하는 풀이이다.

#include <cmath>
using namespace std;

int solution(int n, int a, int b) {
    int answer = 0, base = n / 2;// base는 구간의 중심이다.
    while (n != pow(2, answer))// 2의 몇 제곱인지 가 곧 최대 라운드이다.
        answer++;
    while (1) {
        if ((a <= base && base < b) || (b <= base && base < a)) break;// 서로 다른 구역이라면
        answer--;
        if (a <= base) base -= pow(2, answer-1);// 같은 구역인데 base기준 왼쪽
        else base += pow(2, answer-1);// 오른쪽
    }
    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;
}

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

소중한 정보 잘 봤습니다!

답글 달기