#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;
}
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers_C++]#Level3_입국 심사, 이분 탐색 (0) | 2023.12.14 |
---|---|
[Programmers_C++]#Level2_타겟 넘버, DFS, 재귀 호출 (0) | 2023.12.13 |
[Programmers_C++]#Level2_구명보트, 투 포인터 알고리즘 (0) | 2023.12.13 |
[Programmers]#Level2_가장 큰 수, sort(), 람다 함수 (1) | 2023.11.23 |
[Programmers]#Level1_배열의 원소 삭제하기, remove_if(), find(), erase() (2) | 2023.11.23 |