<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[Level 3] 다음 큰 숫자 (nextBigNumber)

BlockDMask 2017. 9. 12. 18:00
반응형
  • 안녕하세요 BlockDMask 입니다.

  • 새로운 알고리즘 문제 사이트를 발견해서

  • 문제를 풀어봤습니다.

0. 문제

  • Programmers Level3 nextBigNumber

  • Programmers Level3 다음 큰 숫자

1. 문제설명

  • (1 <= N <= 1,000,000)일때

  • N의 다음 큰 숫자를 구하라.

  • 다음 큰 숫자란.

  • 1) N을 2진수로 바꾸었을때 1의 갯수가 같은 숫자를 말한다.

  • 2) 1번 조건을 만족한 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 말한다.

2. 풀이과정

  • 1번 조건을 위해서 getCount 함수를 만들었습니다.

  • getCount 함수는 파라미터로 전달받은 정수를 2진수로 바꾸었을때 1의 갯수를 반환하는 함수입니다.

  • n보다 큰 값을 하나씩 getCount에 넣으면서 1의 갯수를 비교합니다.

  • n의 2진수에서 1의 갯수와 동일한 갯수를 가진 숫자가 나오면 

  • 결과를 출력합니다.


3. 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
using namespace std;
 
//2진수로 바꾸었을때 1의 갯수를 반환하는 함수
int getCount(int n){
    int count =0;
    for(int i=n; i>0; i--){
        if(n%2 == 1){
            count++;
        }
        n = n/2;
    }
    return count;
}
 
//다음 큰 숫자를 반환하는 함수.
int nextBigNumber(int n) {
    int answer;
    int cnt1 = getCount(n);
    int cnt2;
 
    while(1){
        cnt2 = getCount(++n);
        if(cnt1 == cnt2){
            answer = n;
            break;
        }
    }
    return answer;
}
 
int main(){
    int n=78;
    //아래는 테스트 출력을 위한 코드입니다.
    cout<<nextBigNumber(n);
}
cs


4. 인증



<문제출처>

https://programmers.co.kr/learn/challenge_codes/170


감사합니다. 도움이 되셨다면 하트 한번 꾹 눌러주세요!

반응형