프로그래머스_점프와 순간이동

임정민·2023년 9월 11일
0

알고리즘 문제풀이

목록 보기
94/173
post-thumbnail

프로그래머스 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 시간 초과


# Greedy 문제임을 직감했지만 구현하지 못함

수를 더하거나 2배씩 늘려 목표한 n값을 도출하는 문제입니다. 수의 패턴이 그려지지 않아 구현하지 못하여 다른 풀이를 참고하였습니다.

[다른 사람의 풀이1]


def solution(n):

    ans = 0
    
    while n!=0:
        if n%2==0:
            n/=2
        else:
            ans+=1
            n-=1
            
    return ans

생각보다 간단한 풀이로 구현할 수 있었습니다. 주어진 수 n을 2나누며 나누어 떨어지지 않을 때는 -1씩 하여 다시 2로 나누는 방식입니다. 풀이 시 1일때는 점프+1, 2일때는 점프+1와2배로 생각하였는데 문제에서 주어진 입력/출력 예시 5000/5를 보고 거꾸로 5000,2500,1250.. 으로 나누어보면 생각하였다면 쉽게 풀 수 있지 않았을까 생각하였습니다.

[다른 사람의 풀이2]


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

또 다른 풀이로 이진법을 활용한 풀이입니다. 문제에서 묘사하는 점프와 2배 순간이동은 사실 이진법에서 +1하거나 2배하여 자릿수를 올리는 원리와 같았습니다. 그리하여 주어진 n을 이진수로 바꾸고 1의 갯수만 파악하면 되는 문제였습니다.

감사합니다.

profile
https://github.com/min731

0개의 댓글