문제 출처: https://programmers.co.kr/learn/courses/30/lessons/12985
Lv 2
2의 제곱으로 N이 주어지는 것과 무조건 a,b 숫자가 연속으로 대결을 한다는 것이 문제 푸는 포인트다. 그러므로 1,2 -> 한그룹 3,4 -> 한그룹 이걸 1,2,3으로 나뉠수 있고 이걸 또 나뉠 수 있다.
#include <iostream>
using namespace std;
int solution(int n, int a, int b)
{
int answer = 1;
while(1){
if(a%2==0 && a-1==b) break;
if(a%2==1&&a+1==b) break;
a = a % 2 == 0 ? a/2 : a/2+1;
b = b % 2 == 0 ? b/2 : b/2+1;
answer++;
}
return answer;
}
처음에 걍 a/2 - b/2 +1
의 식을 도출해서 풀었는데 테케를 통과하지 못했다. 왜일까? 여러 테케를 시도해봤는데 다 맞아가지고 일단 일일이 나누고 들어가는 식으로 했다.