본문 바로가기

알고리즘 문제

프로그래머스 예상 대진표

처음엔 n을 반으로 나누고 그 n을 기준으로 양쪽에 a,b가 있으면 그때부터 num을 반으로 나누면서 count를 세고 1이 되면 count를 반환했다.

시간이 오래 걸리거나 틀렸다.


실패 - 런타임 에러...

#주어진 길이 n을 2로 나누면서 n이 a,b사이에 있을 때 계산하기.
def solution(n,a,b):
count=0
while True:
if a<=n and b>n:
num=n
while True:
count+=1
if num==1:
return count
else:
num//=2
else:
n //= 2
print(solution(8,4,7))
print(solution(8,3,7))
print(solution(16,1,14))


단순히 a,b를 노가다로 나누다가 a,b가 같아지면 결국 만난 거니까 그때까지의 count를 반환한다.


성공

def solution(n,a,b):
count=0
while a!=b:
if a%2==0:
a//=2
else:
a//=2
a+=1
if b%2==0:
b//=2
else:
b//=2
b+=1
count+=1
return count
print(solution(8,4,7))
print(solution(8,3,7))
print(solution(16,1,14))





'알고리즘 문제' 카테고리의 다른 글

프로그래머스 조이스틱  (0) 2018.10.11
프로그래머스 큰 수 만들기  (3) 2018.10.06
프로그래머스 소수 만들기  (0) 2018.10.06
프로그래머스 항상 정답  (1) 2018.10.06
프로그래머스 폰켓몬  (0) 2018.10.05