본문 바로가기

Programmers/Level2

점프와 순간 이동

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
 
public class Solution {
    public int solution(int n) {
        int ans = 0;
        while (n != 0) {
            if (n % 2 != 0) {
                n--;
                ans++;
            }
            n /= 2;
        }
        return ans;
    }
}
cs

n까지 가는 경로에 규칙이 있다.

n = 5 -> 1 - 2 - 4 - 5

n = 6 -> 1 - 2 - 3 - 6

n = 5000 -> 1 - 2 - 4 - 8 - 9 - 18 - 19 - 38 - 39 - 78 - 156 - 312 - 624 - 625 - 1250 - 2500 - 5000

역순으로 생각하여 2로 나누다가, 나뉘어 떨어지지 않을 때 -1을 해주면 된다.

이는 n을 이진수로 변환했을 때의 1의 갯수와 같다.

'Programmers > Level2' 카테고리의 다른 글

후보키  (0) 2021.07.28
[1차] 프렌즈4블록  (0) 2021.07.27
구명보트  (0) 2021.07.26
영어 끝말잇기  (0) 2021.07.25
가장 큰 정사각형 찾기  (0) 2021.07.24