본문 바로가기
Programming Solve/프로그래머스

프로그래머스 - 다음 큰 숫자 / C++

by msm1029 2021. 11. 13.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12911

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr

 

문제 풀이

비트, 구현에 관련된 문제이다.

n보다 크며 이진수로 나타냈을 때 1의 개수가 같은 수를 리턴하면 되므로

n+1부터 입력 최대범위인 100만까지 돌며 조건에 만족하는지 함수를 통해 구현한다.

이때 2^19 < 100만 < 2^20이므로 자릿수는 20까지만 표현해도 된다.

 

소스 코드

#include <bits/stdc++.h>
using namespace std;

bool SameBinaryOne(int a, int b){
    string binaryA, binaryB;
    
    binaryA = bitset<20>(a).to_string();
    binaryB = bitset<20>(b).to_string();
    
    int cntA = 0, cntB = 0;
    
    for(int i=0; i<binaryA.size(); i++){
        if(binaryA[i] == '1') cntA++;
    }
    for(int i=0; i<binaryB.size(); i++){
        if(binaryB[i] == '1') cntB++;
    }
    
    if(cntA == cntB) return true;
    else return false;
}

int solution(int n) {
    int answer = 0;
    
    for(int i=n + 1; i<1000001; i++){
        if(SameBinaryOne(n, i)){
            answer = i;
            break;
        }
    }
    
    return answer;
}
반응형