[프로그래머스] 다음 큰 숫자 | C++
Algorithm/문제풀이
2022. 12. 26. 13:43
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
주어진 n보다 크면서
n과 비트의 수가 같은 자연수를 찾는 문제였다.
나의 풀이 전략
1. 비트의 갯수를 세주는 getBitCount() 함수를 선언한다.
2. n + 1부터 while 문을 돌린다.
상세
1. 자연수 n에 대해서 비트의 수를 반환하는 getBitCount() 함수를 선언한다.
더보기
int getBitCount(int n)
{
int answer = 0;
return answer;
}
2. 1을 비트단위로 하나씩 옮겨가며 비트가 겹치면 반환값(answer)을 추가해준다.
int getBitCount(int n)
{
int answer = 0;
for(int i = 0; (1 << i) <= n; ++i)
{
if( n & (1 << i) )
answer++;
}
return answer;
}
3. 이제 solution()에서 (n + 1)부터 시작하여
while 문으로 비트가 같은 자연수를 찾아본다.
더보기
int solution(int n) {
int answer = n + 1;
int nBitCount = getBitCount(n);
while(getBitCount(answer) != nBitCount)
answer++;
return answer;
}
전체 소스코드
using namespace std;
int getBitCount(int n)
{
int answer = 0;
for(int i = 0; (1 << i) <= n; ++i)
{
if( n & (1 << i) )
answer++;
}
return answer;
}
int solution(int n) {
int answer = n + 1;
int nBitCount = getBitCount(n);
while(getBitCount(answer) != nBitCount)
answer++;
return answer;
}
다른 사람의 풀이
#include <bitset>
using namespace std;
int solution(int n) {
int num = bitset<20>(n).count();
while (bitset<20>(++n).count() != num);
return n;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[프로그래머스] 2 x n 타일링 | C++ (0) | 2023.01.03 |
---|---|
[프로그래머스] JadenCase 문자열 만들기 | C++ (0) | 2022.12.26 |
[프로그래머스] 다리를 지나는 트럭 | C++ (0) | 2022.12.23 |
[프로그래머스] 숫자의 표현 | C++ (0) | 2022.12.23 |
[프로그래머스] 크레인 인형 뽑기 | C++ (2) | 2022.12.22 |