프로그래머스/Python
[프로그래머스] 예상 대진표 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 7. 10. 13:31
728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
해당 문제는 전체 참가자를 두 부분으로 나누고 두 참가자의 위치가 서로 분리되어 있으면 결과를 도출하는 방식으로 해결했습니다.
- 정답이 도출되어 반환되기 전까지 계속 반복합니다. while (True)
- 가운데 지점을 정합니다. center = n // 2
- 만약 두 참가자가 같은 부분에 있는데 중앙보다 큰 쪽에 있다면 if (a > center) and (b > center)
- 참가자의 번호를 다시 1부터 나열되도록 맞추기 위해 각 참가자의 번호에서 중앙의 값을 빼준 값으로 새로 저장합니다. a -= center b -= center
- 전체 참가자의 수를 절반으로 바꿔줍니다. n = center
- 반면에 두 참가자가 같은 부분에 있지만 중앙보다 작은 쪽에 있다면 elif (a <= center) and (b <= center)
- 각 참가자의 번호는 바꿀 필요가 없고 전제 참가자의 수만 절반으로 바꿔줍니다. n = center
- 만약 두 참가자가 서로 다른 부분에 있다면 각 참가자는 모두 이기고 마지막에 서로 만나게 되므로 전체 참가자가 몇 라운드를 하게 되는지 구해주면 됩니다. else
- 각 라운드가 진행될 때마다 참가자가 절반으로 줄어들게 되므로 1명이 남을 때까지 while (n != 1)
- 계속해서 2로 나누어준 몫을 저장하고 n //= 2
- 라운드 횟수를 1씩 증가시켜 줍니다. answer += 1
- 그리고 서로 다른 부분에 있을 때 정답이 도출되므로 정답을 반환해 줍니다.
반응형
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
반응형