[12980] 점프와 순간 이동 ⭐⭐
태그: cpp, Programmers
카테고리: Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/12980
난이도 ⭐⭐
문제
나의 풀이
현재 지점의 2배를 건전지 사용 없이 순간이동 할 수 있기 때문에
도착하는 지점에서 2로 나누어 되돌아 가는 과정에서는 건전지 사용량이 늘어나지 않는다.
그렇기 때문에 도착 지점 n을 2로 계속해서 나눠주고,
2로 나누어 떨어지지 않는다면 나머지 값 1을 한 칸 걸어가는 것으로 생각하고
건전지 사용량을 1 증가시킨다.최종적으로 몫 1이 나올 때 까지 2로 나누어서 몫 + 나머지값들을 더해주는 게 건전지 사용량이 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int solution(int n)
{
int ans = 0;
int quotient = n;
int reminder = 0;
while (quotient != 1)
{
reminder += quotient % 2;
quotient /= 2;
}
ans = quotient + reminder;
return ans;
}
댓글남기기