본문 바로가기

알고리즘(Python)

[프로그래머스 LV.2] 점프와 순간 이동

https://school.programmers.co.kr/learn/courses/30/lessons/12980

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

전체 코드

def solution(n):
    ans = 0
    while n != 1:
        if n % 2 == 1:
            ans += 1
            n -= 1
        n = n / 2
            

    return ans+1

 

알고리즘 설명

반복문을 사용하였다.

 

코드 설명

배터리를 가장 많이 아낄 수 있는 방법은 1 만큼씩 이동하고 나머지는 순간이동으로 이동하는 방법이라고 생각했다.

따라서 이동해야 할 거리를 2로 나누면서 나누어 떨어지지 않는 경우에는 1을 뺀 뒤 다시 진행하는 방법으로 코드를 작성했다.

이후 정답을 반환할 때는 1을 더한 값을 반환하였다. 1만큼 이동한 뒤 순간이동을 진행할 것이기 때문이다.

 

 

다른 사람의 풀이

코드를 작성한 후 다른 사람의 풀이를 확인해 보니 2진법으로 푼 사람이 있었다.

나의 문제 해결을 위한 아이디어도 2진법을 떠올릴 수 있었던 아이디어였던 것 같다.

def solution(n):
    return bin(n).count('1')

 

다양한 문제를 풀며 경험을 쌓는다면 언젠간 나도 저런 멋진 코드를 짤 수 있을 것이다!