[プログラマー]予想されるインターホン(Python)


質問リンク-https://programmers.co.kr/learn/courses/30/lessons/12985

私の答え

def solution(n,a,b):
    cnt = 1
    while True:
        if a%2!=0 and b-a == 1: # a가 더 작을 때
            break
        elif b%2!=0 and a-b == 1: # b가 더 작을 때
            break
        else:
            if a % 2 == 0:
                a//=2
            else:
                a = a//2 + 1
            if b % 2 == 0:
                b//=2
            else:
                b = b//2+1
            cnt += 1
        
    return cnt
  • aとbを偶数面2で割る奇数面2の商+1
  • aがbより小さい場合、以下の手順により奇数となるため、aは奇数となり、bとの差が1である場合、break(bがaより小さい場合も同様)
  • となる.

    他人の解答

    def solution(n,a,b):
        answer = 0
    
        while a != b:
            answer+=1
            a, b = (a+1)//2, (b+1)//2                    
        return answer
  • (1,2) (3,4) (5,6) (7,8)... このように対決を行い,aとbに1を2で割ると奇数/偶数を問わず解くことができる.