기계는 거짓말하지 않는다

[Programmers] 다음 큰 숫자 (C++) 본문

Programming Test

[Programmers] 다음 큰 숫자 (C++)

KillinTime 2022. 10. 9. 21:18

프로그래머스 - 다음 큰 숫자 문제입니다.

 

문제, 입출력 예

주어진 자연수를 2진수로 변환했을 때, 1의 개수가 같고 주어진 자연수 보다 큰 숫자를 찾으면 됩니다.

주어진 자연수 보다 1 더 큰 숫자 부터 확인을 시작하고,

비트 연산자로 1을 왼쪽으로 밀면서 AND 연산하여 2진수 1의 개수를 확인합니다.

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = n;	// 주어진 자연수 보다 1 더 큰 숫자로 시작해야 함
    int i, n_cnt = 0, bit_check = 1, check_cnt = 0;
    
    while(bit_check <= n) {	// 자연수 n의 2진수 1의 개수 확인
        if(n & bit_check) n_cnt++;
        bit_check <<= 1;
    }
    
    while(check_cnt != n_cnt) {	// 자연수 n과 자연수 n보다 큰 숫자의 2진수 1의 개수가 같을때까지
        answer++;
        check_cnt = 0;
        bit_check = 1;
        while(bit_check <= answer) {	// 자연수 n보다 큰 숫자의 2진수 1의 개수 확인
            if(answer & bit_check) check_cnt++;
            bit_check <<= 1;	// 비트를 왼쪽으로
        }
    }
    
    return answer;
}

 

'Programming Test' 카테고리의 다른 글

[Programmers] 우박수열 정적분 (Python)  (0) 2023.03.31
[Programmers] 프린터  (0) 2021.06.24
[Programmers] n진수 게임  (0) 2021.05.27
[Programmers] 더 맵게  (0) 2021.05.18
[Programmers] 올바른 괄호  (0) 2021.05.03
Comments