알고리즘/BOJ

백준 1057번 토너먼트

꾸준함. 2018. 5. 7. 21:07

문제 링크입니다: https://www.acmicpc.net/problem/1057


간단한 수학 문제였습니다.

라운드가 올라갈때마다 자신의 번호는 (자신의 번호 + 1)/2가 됩니다.

따라서 두 경쟁자 모두 2로 나누었을 때 똑같은 위치에 있다면 해당 라운드에서 경쟁하게 됩니다.


#include <iostream>

using namespace std;

 

int N;

int competitor1, competitor2;

 

int getRound(void)

{

        int round = 1;

 

        while (N)

        {

                 //서로 인접해있다면 break

                 if ((competitor1 + 1) / 2 == (competitor2 + 1) / 2)

                         break;

                 //라운드가 올라갈수록 idx는 반이 된다

                 competitor1 = (competitor1 + 1) / 2;

                 competitor2 = (competitor2 + 1) / 2;

                 round += 1;

                 N /= 2;

        }

        //경쟁하지 않는다면

        if (!N)

                 return -1;

        return round;

}

 

int main(void)

{

        cin >> N;

        cin >> competitor1 >> competitor2;

 

        cout << getRound() << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형