[프로그래머스] 다음 큰 숫자

hamsteak·2023년 9월 16일
0

ps

목록 보기
9/39

주어진 수 n보다 크면서 2진수로 표현했을 때, n과 1의 개수가 같은 수 중 가장 작은 수를 찾는 문제.

가장 작은 다음 큰 수를 찾으려면 2진수로 나타낸 nn에서 ni=1n_i = 1을 만족하는 ii 중 가장 작은 ii, 즉 자릿값이 1인 자릿수 중에서 가장 작은 자릿수 ii를 찾아 nin_i에 1을 더해준다. 그 후에 최하위비트부터 1의 개수가 부족한 만큼 채워주면 된다.

예제: "78(1001110)의 다음 큰 숫자는 83(1010011)입니다."

6543210
781001110i = 1 이므로, n1n_1 += 1
10100001의 개수가 2개 부족
10100011의 개수가 1개 부족
831010011

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

cpp code

#include <math.h>

using namespace std;

int solution(int n) {
    int zero_cnt = 0;
    for (;n>0;zero_cnt++) {
        if (n % 2 == 1) break;
        n /= 2;
    }
    int one_cnt = 0;
    for (;n>0;one_cnt++) {
        if (n % 2 == 0) break;
        n /= 2;
    }
    n += 1;
    for (int i=0;i<zero_cnt+one_cnt;i++) n *= 2;
    for (int i=0;i<one_cnt-1;i++) n += pow(2, i);
    return n;
}
profile
안녕하세요

0개의 댓글