[프로그래머스 LEVEL2 : 예상 대진표][python]
2023. 3. 18. 22:46ㆍAlgorithm/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12985#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import math
def solution(n,a,b):
answer = 0
while (n >= 2):
if (a <= n //2 and b > n //2) or (a > n//2 and b <= n //2):
answer = math.log2(n)
break
elif a > n//2 and b > n//2:
a -= n//2
b -= n//2
n = n //2
return answer
- 아이디어
1. 예를 들어, n이 8인 경우, a와 b가 각각 1, 5와 같이 n/2를 기준으로 양쪽으로 나뉜 경우, 두 경쟁자가 만나는 지점은 항상 맨 마지막 라운드 즉, log2(n)번째 라운드이다.
2. 만약 n이 8인 경우에 a,b가 각각 1,4와 같이 n/2를 기준으로 왼쪽에만 있는 경우, 해당 문제는 n / 2일 때와 같은 문제로 나눌 수 있고, 1번 조건을 다시 적용할 수 있다.
3. 그러나 2번 조건을 만족하지 않는 경우는 n이 8일때 a,b가 각각 6,8 처럼 n/2 기준으로 오른쪽에 있는 경우에는 n/2가 a,b보다 작아지므로 1번 조건을 만족시키는 경우가 절대 나오지 않게되는데, 이때 토너먼트 대진은 반드시 좌우 대칭형태이므로 예시를 기준으로 a,b에서 n/2만큼 빼주게 되면 a,b가 2, 4로 바뀌고 이는 2번의 조건을 적용할 수 있어 반드시 정답을 찾을 수 있다.
-- 깨달음
: 여러가지 정답이 있으나, 이 방법이 나에게는 가장 직관적인 듯 함
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [프로그래머스 LEVEL2 : H-Index][python] (0) | 2023.03.21 |
|---|---|
| [프로그래머스 LEVEL1 : 푸드 파이트 대회][python] (0) | 2023.03.20 |
| [프로그래머스 LEVEL1 : 가장 가까운 같은 글자][python] (0) | 2023.03.15 |
| [프로그래머스 LEVEL2 : 영어 끝말잇기][python] (0) | 2023.03.13 |
| [프로그래머스 LEVEL1 : 콜라 문제][python] (0) | 2023.03.08 |