4 → 2 → 1 , 7 → 4 → 2 가 되어 3번째 라운드에서 맞붙게 된다.4 → 2 → 1 → 1 , 7 → 4 → 2 → 1 이므로 둘의 번호가 같아질 때까지 반복문을 돌려 확인하면 된다.문제 자체는 쉬운데 오답이 나와서 로그를 찍어보니, round(0.5) 인 경우에는 1이 아닌 0을 반환해주는 것 🤯
반올림 처리를 할 때 사용했던 round 함수가 문제라 올림 처리를 해주는 math.ceil 함수를 이용하니 해결되었다.
이런 결과가 나온 이유는 파이썬의 round 함수가 반올림할 때 짝수에 묶는 "ROUND_HALF_EVEN" 방식을 사용하기 때문이다.
이 방식은 짝수에 가까운 쪽으로 반올림 한다.
따라서 round(0.5) = 0, round(1.5) = 2, round(2.5) = 2, round(3.5) = 4가 된다. (왜 그렇게 하는거죠?!)
우리가 흔히 알고 있는 반올림은 "ROUND_HALF_UP" 방식이다.
Python 3.x에서 기본 제공하는 round 함수는 "ROUND_HALF_EVEN"만을 지원한다.
"ROUND_HALF_UP"를 사용하기 위해서는 별도의 함수를 구현해야만 한다.
[해결방안]
[ROUND_HALF_EVEN 사용하는 이유]
import math
def solution(n,a,b):
rnd = 0
while a != b:
a = math.ceil(a / 2)
b = math.ceil(b / 2)
rnd += 1
return rnd
const solution = (n, a, b) => {
let rnd = 0;
while (a !== b) {
a = Math.round(a / 2);
b = Math.round(b / 2);
rnd++;
}
return rnd;
};