[프로그래머스] 예상 대진표(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를 차이가 1이 될 때 까지 짝수면 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로 나눠주면 홀수/짝수 나누지 않고도 풀 수 있다.

좋은 웹페이지 즐겨찾기