본문 바로가기
Language/알고리즘 문제풀이

프로그래머스 점프와 순간 이동(Java)

by wakestand 2019. 9. 23.
반응형

사이트명 : 프로그래머스(Programmers)

문제명 : 점프와 순간 이동

언어 : 자바(Java)

 

문제를 요약하자면

N숫자를 받아서

그냥 한칸 움직이면 배터리를 1 쓰고

순간 이동을 하면 현재 값에서 *2를 하고 배터리를 쓰지 않는다

 

내 풀이방법은 아래와 같은데

 

문제를 역발상으로 해서 풀었는데

채워서 n을 만드는 게 아니라

n에서 나누고 빼가면서 풀었다

 

먼저 순간이동은 배터리를 소모하지 않고 2배로 이동하니까

N을 2로 나눠서 나눠지면 계속 나누고

 

나머지값이 나오면 -1을 시킨뒤 배터리에 해당하는 ans 값을 증가시킨다

 

이후 나눠지면 나누고 안되면 빼고 이런 식으로 0이 될 때까지 진행하면

간단하고 배터리 소모량을 알 수 있다

 

마지막으로 프로그래머스에 바로 적용 가능한 코드는 아래와 같다

 

import java.util.*;

public class Solution {
    public int solution(int n) {
        int ans = 0;
        
        while(n != 0) { // 0 될때까지 반복
        	
        	if( n % 2 == 0) { // 2로 나눠지면 나눈다
        		n = n / 2;
        	} else {
        		n = n - 1; // 나눠지지 않을 경우 1을 빼본다
        		ans++; // 배터리 소모
        	}
        	
        }

        return ans;
    }
}
반응형

댓글