[프로그래머스] 예상 대진표 Python

김유상·2022년 10월 16일
0

프로그래머스

목록 보기
1/20

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12985

토너먼트 게임에서 리프에 있는 대진자들을 왼쪽 끝부터 오른쪽 끝까지 1부터 번호를 매겼을 때, 임의의 번호 A와 B를 가진 참가자가 몇 번째 라운드에서 맞붙게 되는지 확인하는 문제이다.

로직을 만드는데 생각해야 할 점은 a > b이거나 1 라운드에서 대진하게 되는 경우이다.
따라서 간단하게 a < b가 될 수 있도록 앞서서 swap을 해주는 것이 편할 지도 모른다.

아래의 코드는 필자가 직접 작성한 로직이다. 코드를 일부러 압축하려고 노력하지 않았기에 다른 풀이를 본다면 훨씬 간결한 코드가 많이 있을 수도 있다.

def solution(n,a,b):
    stage = 0
    if a > b:
        tmp = a
        a = b
        b = tmp
        
    while a != b:
        stage += 1
        
        a = a//2 if a%2 == 0 else a//2 + 1 
        b = b//2 if b%2 == 0 else b//2 + 1
        n = n//2
        
    return stage
        a = a//2 if a%2 == 0 else a//2 + 1 
        b = b//2 if b%2 == 0 else b//2 + 1

찾아보니까 위 코드를 아래와 같이 바꿀 수 있었다. 뭐 홀수 부분을 처리한다는 관점에서 별로 다르지 않지만 제거할 수 있는 if문을 제거하는 것은 언제나 환영할 일이다.

       a, b = (a+1)//2, (b+1)//2
profile
continuous programming

0개의 댓글