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

 

프로그래머스

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

programmers.co.kr

 

[C++][프로그래머스][Lv2] 12980. 점프와 순간이동


 ❗풀이방법

1. 배터리를 최소로 사용하려면  ? ▶️순간이동을 최대한 많이 해야한다.

예시1) 거리가 5일 때 

: 2에서 순간이동 한 뒤 1칸을 점프하면 된다.

: 2는 ? 1에서 순간이동 하면된다.

: 1은? 0에서 한칸 점프하면 된다. 

 

예시2) 거리가 6일 때

: 3에서 순간이동 하면 된다. 

: 3은 ? 2에서 1칸을 점프하면 된다.

: 2는 ? 1에서 순간이동 하면 된다.

: 1은 ? 0에서 1칸 점프하면 된다. 

 

예시3) 거리가 5000일 때

: 2500에서 순간이동 하면된다.

: 2500는 ? 1250에서 순간이동 

: 1250은? 625에서 순간이동 

: 625는 ? 한칸 점프해서 624로 간 뒤 312에서 순간이동 

: 312는 ? 156에서 순간이동

: 156은? 78에서 순간이동

.....

 

: 순간이동은 거리가 짝수 일때만 할 수 있다. 순간이동을 하기 위해서는 홀수인 거리에서 한칸 점프(거리 -1 )해서 짝수로 만들어줘야한다.

 


✅풀이

#include <iostream>
using namespace std;

int solution(int n)
{
    int answer = 0;
    
    while(true)
	{ 
		if (n == 0)
			break;

		// 짝수면 > 나누기 2
		if (n % 2 == 0)
			n /= 2;

		// 홀수면 > 빼기 1
		else 
		{
			n -= 1;
			answer += 1;
		}
	}

    return answer;
}

 


https://github.com/kimYouChae/C-Programmers

 

GitHub - kimYouChae/C-Programmers

Contribute to kimYouChae/C-Programmers development by creating an account on GitHub.

github.com

 

+ Recent posts