본문 바로가기

Algorithm/프로그래머스

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

반응형

프로그래머스 : 예상 대진표

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


- 문제

  A와 B가 주어졌을 때 몇번의 대결만에 만나게 될 지 구하는 문제다.

 


- 풀이

#include <iostream>

using namespace std;

int solution(int n, int a, int b)
{
    int answer = 0, sum = 1;;
    bool left, right;
    
    while(sum != n){
        answer++;
        sum *= 2;
    }
    
    while(sum != 0){
        int half = sum/2;
        left = (a - half <= 0) ? false : true;
        right = (b - half <= 0) ? false : true;
        if(left != right){
            return answer;
        }
        else if(!left){
            sum /= 2;
        }
        else{
            sum /= 2;
            a -= sum;
            b -= sum;
        }
        answer--;
    }
    

    return 1;
}

 

 

절반으로 나누었을 때 둘다 왼쪽에 있거나 둘다 오른쪽에 있으면 절반씩 줄여 나가고

만약 둘다 다른 쪽에 있으면 현재 2의 n승을 정답으로 내놓으면 된다.

 

  


- 기억할 것!

 X

반응형