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

fsm12·2023년 8월 11일
0

프로그래머스

목록 보기
57/57
post-thumbnail
post-custom-banner

문제링크

문제 이해

[ 입력형태 / 조건 ]

n
아이언 슈트 구매자가 이동하려는 거리 | 8 | 1 이상 10억 이하의 자연수

[ 문제 ]

사용해야 하는 건전지 사용량의 최솟값을 return
점프 or 순간이동의 방법으로 이동 가능
점프 : 한번에 원하는 칸을 이동할 수 있지만, 이동한 칸만큼 건전지가 사용됨
순간이동 : 이때까지 이동해온 칸의 2배로 이동가능하고 건전지를 소모하지 않음

[ 풀이 ]

가능하면 순간이동으로 목적지에 도달하는것이 이득임(그리디)
순간이동은 전에 이동한 거리의 2배이므로, 전에 이동한 거리가 짝수가 아니면 한칸은 점프를 해서 이동했어야 함

예시 - n이 5000인 경우)

순서현재 위치이동 방법이동 결과소모 건전지
15000순간이동25000
22500순간이동12500
31250순간이동6250
4625한칸점프3121
5312순간이동1560
6156순간이동780
778순간이동390
839한칸점프191
919한칸점프91
109한칸점프41
114순간이동20
122순간이동10
131한칸점프01

=> 전체 소모 최소 건전지량 : 5




코드

> [성공] 1차 시도 : 구현

  • 생각한 풀이 그대로 구현
import java.util.*;

public class Solution {
    public int solution(int n) {
        int ans = 0;
        while(n!=0){
            if(n%2 == 1){
                ans+=1;
            }
            n/=2;
        }
        return ans;
    }
}




Tip : 입력 변수의 크기가 크다면, 규칙을 찾아 연산 횟수를 줄여야 한다.

post-custom-banner

0개의 댓글