예상 대진표 - Python
2023. 10. 18. 20:26ㆍ공부/📝 프로그래머스
1. 풀이 코드
def solution(n, a, b):
a = f"{a - 1:020b}"
b = f"{b - 1:020b}"
answer = 20
for i, j in zip(a, b):
if i == j:
answer -= 1
else:
break
return answer
# Test Cases
print(solution(8, 4, 7) == 3)
print(solution(8, 4, 8) == 3)
위와 같이 풀었습니다. 수학적 원리는 아래와 같습니다.
특징을 잡아내기 위해 -1 프로세싱을 했습니다.
이런 상태에서 2로 나누면 몫이 일정하게 나옴을 확인할 수 있습니다.
다시 똑같은 과정이 진행되기에 반복문으로 진행할 수 있습니다. 이럴 때에 2로 나눈 다는 것은 비트시프트를 하는 과정과 같으므로 사실상 두 수를 2비트로 표현했을 때 1의 자리부터 시작하여 다른 부분을 모두 제외한 자릿수입니다.
2. 다른 사람 풀이 코드
def solution(n,a,b):
return ((a-1)^(b-1)).bit_length()
.bit_length()에 대해 처음 알았습니다. 이것을 미리 알았다면 번거로운 과정이 필요없었겠군요.
- 그림: https://draw.io/
'공부 > 📝 프로그래머스' 카테고리의 다른 글
추억 점수 - Python (0) | 2023.11.17 |
---|---|
콜라 문제 - Python (0) | 2023.10.21 |
점프와 순간 이동 - Python (0) | 2023.10.17 |
푸드 파이트 대회 - Python (0) | 2023.10.17 |
K번째수 - Python (0) | 2023.10.17 |