Publish:

태그: ,

카테고리:

https://school.programmers.co.kr/learn/courses/30/lessons/12980
난이도 ⭐⭐

문제

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;
}

이슈 및 공부한 것을 기록해두는 개인 블로그 입니다. 댓글, 피드백 환영합니다 🙂

Update:

댓글남기기