[프로그래머스] 점프와 순간 이동Lv.2
나의 풀이
def solution(n):
factors = []
while n > 0:
factors.append(n)
n //= 2
factors = sorted(factors)
return sum([1 for i in factors if i % 2 != 0])
- n을 포함하여 n이 0이 보다 클 때까지 n을 2로 나누고 몫을 factors 리스트에 넣어준다. 이 리스트는 n까지 가는 길로 활용한다. 이 factors 리스트를 잘 보면 다음 단계가 홀수인 경우에는 점프를 해야되는 규칙이 보인다.
ex) n = 10
약수: 1 -> 2 -> 5 -> 10
0 -> 1. 홀수이므로 ans += 1. 현재 위치 1
1 -> 2. 홀수가 아니므로 스킵. 현재 위치 2
2 -> 5. 홀수이므로 ans += 1. 현재 위치 5
5 -> 10. 홀수가 아니므로 스킵. 현재 위치 10
- 이런식으로 홀수일 때만 ans를 1씩 늘려줘서 답을 구하면 된다.