문제 설명
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
- 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
- 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
- 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
제한 사항
- n은 1,000,000 이하의 자연수 입니다.
C++ 풀이
#include <string>
#include <vector>
#include <bitset>
using namespace std;
int solution(int n) {
int num = bitset<20>(n).count(); //10진수 -> 2진수 변환 후, 1의 개수 카운트
int i = n + 1;
while (bitset<20>(i).count() != num)
i++;
return i;
}
10진수를 2진수로 변환하기 위해 bitset클래스를 사용해보았다.
bitset<자릿수 크기>(변환하려는 수) 를 통해 10진수 -> 2진수로 변환하였다.
변환한 2진수값에 count() 함수를 사용하면 1의 개수를 리턴할 수 있다.
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/12911
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[프로그래머스] 뉴스 클러스터링 (0) | 2019.12.01 |
---|---|
[프로그래머스] 비밀지도 (0) | 2019.11.24 |
[SWEA 3314] 보충학습과 평균 (0) | 2019.11.22 |
[SWEA 5948] 새샘이의 7-3-5 게임 (0) | 2019.11.20 |
[프로그래머스] 멀쩡한 사각형 (0) | 2019.11.18 |