https://www.acmicpc.net/problem/1057
간단한 구현 문제였다.
최종 인원이 1명이 될 때 까지 라운드를 반복하다가
매치 트리에서 왼쪽에 있는 참가자 번호와 오른쪽에 있는 참가자 번호가 지민, 한수 번호와 일치한다면 해당 라운드 값을 출력해주면 된다.
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
int jiminNum;
int hansuNum;
int maxNum;
cin >> maxNum;
cin >> jiminNum;
cin >> hansuNum;
int round = 0;
bool isMatching = false;
while (maxNum > 1 && !isMatching)
{
round++;
int matchNum = 0;
for (int i = 1; i <= maxNum; i += 2)
{
matchNum++;
int leftNum = i;
int rightNum = i + 1;
if (leftNum == jiminNum || rightNum == jiminNum)
{
jiminNum = matchNum;
if (rightNum == hansuNum || leftNum == hansuNum)
{
isMatching = true;
break;
}
}
else if (leftNum == hansuNum || rightNum == hansuNum)
{
hansuNum = matchNum;
}
}
maxNum = matchNum * 2 < maxNum ? matchNum + 1 : matchNum;
}
if (isMatching)
cout << round;
else
cout << -1;
return 0;
}

'알고리즘 > BOJ' 카테고리의 다른 글
| 백준 9655번: 돌 게임 (0) | 2025.09.16 |
|---|---|
| 백준 2468번: 안전 영역 (3) | 2025.08.04 |
| 백준 25206번: 너의 평점은 (0) | 2025.03.21 |
| 백준 7569번: 토마토 (0) | 2023.08.18 |
| 백준 5430번: AC (0) | 2022.10.15 |