문제에서의 규칙은
1. 언제나 승리한다
2. 1, 2 -> 1 / 2, 3 -> 2 와 같이 한단계씩 증가한다
3. 두 수가 만날 때 멈춘다
정해진 끝이 없는 상태이기 때문에 while으로 맞추고, 다음으로는 해당하는 공식을 생각한다.
다음 문제의 경우 두 수의 다음 수고, 언제나 짝수이기 때문에 짝수에 해당하는 큰 수를 기준으로 나누고, 홀수의 경우 언제나 짝수 - 1이기때문에 나눈 수 + 1을 하면 된다. 다른 풀이로는 %를 해 나머지를 구하는 방법이 존재한다. 나는 후자를 선택함.
두 수가 나올 때까지 ans에 ++를 해서 올라가는 증감식을 선택하고, 두 수가 같을 때 증감을 마무리하고 해당하는 값을 리턴하면 끝!
public int t04(int n, int a, int b)
{
int answer = 0;
while ( true ){
if ( a == b ){
break;
}
// 1 2 -> 1
// 3 4 -> 2
// 5 6 -> 3
a = a/2 + a%2;
b= b/2 + b%2;
answer ++;
}
return answer;
}
'Algorithm' 카테고리의 다른 글
[012] 귤 고르기 (0) | 2024.02.20 |
---|---|
[011] 멀리 뛰기 (0) | 2024.02.19 |
[009] N개의 최소공배수 (0) | 2024.02.19 |
[008] 구명보트 (0) | 2024.02.16 |
[007] 점프와 순간 이동 (0) | 2024.02.16 |