프로그래머스/Python

[프로그래머스] 예상 대진표 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

우당탕탕 개발자 2023. 7. 10. 13:31
728x90
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 전체 참가자를 두 부분으로 나누고 두 참가자의 위치가 서로 분리되어 있으면 결과를 도출하는 방식으로 해결했습니다.

 

  1. 정답이 도출되어 반환되기 전까지 계속 반복합니다. while (True)
  2. 가운데 지점을 정합니다. center = n // 2
  3. 만약 두 참가자가 같은 부분에 있는데 중앙보다 큰 쪽에 있다면 if (a > center) and (b > center)
  4. 참가자의 번호를 다시 1부터 나열되도록 맞추기 위해 각 참가자의 번호에서 중앙의 값을 빼준 값으로 새로 저장합니다. a -= center  b -= center
  5. 전체 참가자의 수를 절반으로 바꿔줍니다. n = center
  6. 반면에 두 참가자가 같은 부분에 있지만 중앙보다 작은 쪽에 있다면 elif (a <= center) and (b <= center)
  7. 각 참가자의 번호는 바꿀 필요가 없고 전제 참가자의 수만 절반으로 바꿔줍니다. n = center
  8. 만약 두 참가자가 서로 다른 부분에 있다면 각 참가자는 모두 이기고 마지막에 서로 만나게 되므로 전체 참가자가 몇 라운드를 하게 되는지 구해주면 됩니다. else
  9. 각 라운드가 진행될 때마다 참가자가 절반으로 줄어들게 되므로 1명이 남을 때까지 while (n != 1)
  10. 계속해서 2로 나누어준 몫을 저장하고 n //= 2
  11. 라운드 횟수를 1씩 증가시켜 줍니다. answer += 1
  12. 그리고 서로 다른 부분에 있을 때 정답이 도출되므로 정답을 반환해 줍니다.
반응형

3. 소스코드

def solution(n,a,b):
    answer = 0

    while (True):
        center = n // 2
        if (a > center) and (b > center):
            a -= center
            b -= center
            n = center
        elif (a <= center) and (b <= center):
            n = center
        else:
            while (n != 1):
                n //= 2
                answer += 1

            return answer
728x90
반응형