728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12985
나의 풀이
- n이 2의 제곱으로 주어지기 때문에 answer = math.log(n, 2)를 사용하여 최대 토너먼트 경기 수에서 -1 씩하여 탐색하였다
- start 와 end 를 이용하여 median 값을 찾아냄
- median값을 중심으로 left, right에 값이 각각 들어있는지 체크
- 각각 들어있다면 answer 값을 리턴 그렇지 않다면 어디에 있는 체크 후 start, end 값 변경
import math
def solution(n,a,b):
if a > b:
a, b = b, a
return search(n,a,b,0,n)
def search(n, a, b, start, end):
answer = math.log(n, 2)
n = n / 2
m = (start + end) / 2
if a <= m and b > m:
return int(answer)
elif a < m and b <= m:
return search(n, a, b, start, m)
else:
return search(n, a, b, m, end)
다른 사람의 풀이
와우 정말 꿈에도 생각하지 못한 풀이였지만 현실에서 생각하게 됐네요.
^는 XOR 비트 연산자이고 bit_length()는 정수를 이진수로 표현하기 위해 필요한 비트(bit)의 수이다
def solution(n,a,b):
return ((a-1)^(b-1)).bit_length()
728x90
'Coding Test > programmers' 카테고리의 다른 글
[Python] 파이썬 프로그래머스 멀리 뛰기 (0) | 2022.11.06 |
---|---|
[Python] 파이썬 프로그래머스 점프와 순간이동 (0) | 2022.11.05 |
[Python] 파이썬 프로그래머스 N개의 최소공배수 (0) | 2022.10.17 |
[Python] 파이썬 프로그래머스 영어 끝말잇기 (1) | 2022.10.14 |
[Python] 파이썬 프로그래머스 카펫 (0) | 2022.10.14 |