[프로그래머스] 12980 점프와 순간 이동 / Java 정답

programmers

쉬운 문제라도 문제를 푸는 방법은 다양합니다.

더 명확하고 깔끔한 문제 해결 방법을 아신다면 자유롭게 말씀해주세요.

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

프로그래머스 저작권을 침해하지 않기 위해

문제 보시고 싶으시면 버튼을 눌러주세요.

답변 형식
프로그래머스 12980 자바
프로그래머스 12980 파이썬

도착 위치 n이 주어졌을 때, 시작위치 0부터 n까지 도착하는 최소 이동 횟수를 return하면 된다.

풀이 조건

현재 위치에서 

  • 앞으로 1칸을 이동
  • 2배를 순간이동 

선택해야 한다.

최소로 이동하는 상황에서 이동 횟수를 구하기 때문에  최대한 순간이동을 많이하는 경우를 구하여야 한다.

0에서 출발하는 경우에는 셀 수 없이 많은 경우의 수가 나온다.

많은 경우의 수를 하나하나 비교하는 것이 불가능하다고 판단 되었다.

따라서 0이 아니라 도착 지점에서 0으로 이동하는 방법으로 코드를 작성했다.

 

 

import java.util.*;

public class Solution {
        public int solution(int n) {
            int answer = 0;  

            while(n!=0) {
                if(n%2==0) n = n/2;
                else {
                    answer++;
                    n -= 1;
                }
            }

            return answer;
        }
    }
import java.util.*;

    public class Solution {
        public int solution(int n) {
            int answer = 0;  
            *** 이동 횟수 세기

            while(n!=0) {
                *** 도착 지점에서 0으로 이동이 끝나기 전까지 반복해라

                if(n%2==0) n = n/2;
                *** 현재 위치가 2로 나누어 떨어지면 순간이동하여라

                else {
                    answer++;
                    n -= 1;
                *** 순간이동이 불가능하다면 한 칸 앞으로 이동하고 이동 횟수 1 추가                  
                }
            }
            return answer;
        }
    }

“[프로그래머스] 12980 점프와 순간 이동 / Java 정답”의 1개의 댓글

댓글 달기

이메일 주소는 공개되지 않습니다.