문제 풀이/Programmers 문제 풀이
[Programmers_C++]#Level2_예상 대진표
Hardii2
2023. 12. 13. 19:01
#1. 문제
#2. 풀이
1. a와 b를 1을 더해주고 2로 계속 나눠준다.
- (a+1)/2와 (b+1)/2 하며 a와 b가 서로 같을 때까지 그 횟수를 카운트합니다.
- a와 b는 매번 이기며 토너먼트를 올라가며, 새로운 라운드에 가서 (a+1)/2 혹은 (b+1)/2 번호를 부여받기 때문입니다.
#3. 코드
#include <iostream>
#include <cstdlib>
using namespace std;
int solution(int n, int a, int b)
{
int answer = 0;
// #1. a와 b의 참가자 번호가 같을 때 까지 2를 나누어준다.
while(a != b)
{
// a가 첫 번째 부여받은 번호가 4라면, 다음 라운드에서 2를 부여받는다.
a = (a+1)/2;
// b가 첫 번째 부여받은 번호가 7라면, 다음 라운드에서 4를 부여받는다.
b = (b+1)/2;
answer++;
}
return answer;
}