문제 링크입니다: 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
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1075번 나누기 (0) | 2018.05.09 |
---|---|
백준 1967번 트리의 지름 (3) | 2018.05.09 |
백준 10835번 카드게임 (2) | 2018.05.07 |
백준 2750번 수 정렬하기 + 백준 2751번 수 정렬하기 2 (0) | 2018.05.07 |
백준 10989번 수 정렬하기 3 (0) | 2018.05.07 |