시간초과 코드
def solution(n,a,b):
answer = 0
arr = [i for i in range(1, n+1)]
while True:
sub_lst = []
for i in range(0, n, 2):
if arr[i] == a and arr[i+1] == b:
answer += 1
return answer
if arr[i] in [a, b]:
sub_lst.append(arr[i])
elif arr[i+1] in [a, b]:
sub_lst.append(arr[i+1])
else:
sub_lst.append(arr[i])
arr = sub_lst
answer += 1
n //= 2
return answer
문제에 맞춰 로직을 그대로 구현 한 결과로 시간초과가 나게됨 (n의 범위가 배우 크므로 수식으로 접근 해야겠다 생각)
정답 코드
def solution(n,a,b):
answer = 0
while True:
if a == b:
return answer
a = (a+1) // 2
b = (b+1) // 2
answer += 1
return answer
해당 숫자들을 2씩 나눠가며 몫을 비교 한다.
처음엔 각 a, b에 1을 더하지 않고 비교를 했는데 그렇게 된다면 몫이 0이 될 경우가 생긴다.
(만약 a가 2일 때 2로 나누면 몫이 1이 되고, 그 이후 연산에서 몫이 0이 되므로 비교가 부정확 하다)
'Programmers' 카테고리의 다른 글
[프로그래머스 / 파이썬 풀이] 행렬의 곱셈 (0) | 2023.02.17 |
---|---|
[프로그래머스 / 파이썬 풀이] 괄호 회전하기 (0) | 2023.02.17 |
[프로그래머스 / 파이썬 풀이] 영어 끝말잇기 (0) | 2023.02.15 |
[프로그래머스 / 파이썬 풀이] 이진 변환 반복하기 (0) | 2023.02.14 |
[프로그래머스 / 파이썬 풀이] 멀리 뛰기 (0) | 2023.02.14 |