문제

programmers.co.kr/learn/courses/30/lessons/12980

 

코딩테스트 연습 - 점프와 순간 이동

OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈

programmers.co.kr

 

문제 풀이

n에서 0으로 역순으로 이동한다고 생각하여 문제를 풀면

먼저 현재 위치(n)이 2로 나눠 떨어지면 n/2 로 이동 (순간이동), 

2로 나눠 떨어지지 않는다면 n-1로 이동(점프) 이런식으로 n이 0에 도착할때까지 연산을 반복해주면된다.

ex ) n = 1000 
    1000 -> 500 -> 250 -> 125 -> 124(점프+1) -> 62 -> 31 -> 30(점프+1) -> ... -> 1
    점프회수 return

 

코드


def solution(n):
    cnt = 0

    while n> 0:
        # 2로 나눠 떨어지면 n/2 위치로 이동    
        if n%2 ==0:
            n//=2
        # 2로 나눠떨어지지않으면 n(-1)/2 위치로 이동 
        # //연산자는 몫만 구하기 때문에 // 연산자 활용
        else:
            n//=2
            # 점프횟수 +1
            cnt+=1


    return cnt
ariz1623