[프로그래머스 C++] 다음 큰 숫자
[프로그래머스 C++] 다음 큰 숫자
https://school.programmers.co.kr/learn/courses/30/lessons/12911
해결전략
구현, 이진수 변환
코드
#include <iostream>
#include <string>
using namespace std;
//이진수로 전환했을때 1의 개수를 카운팅하여 리턴하는 함수
int BinaryCount(int n)
{
int cnt = 0;
string bdigit;
while (n > 0)
{
if (n % 2 == 1) cnt++;//1의 개수를 카운팅
//이진수를 string으로 전환.
//풀고보니 해당 문제에서는 굳이 필요하지 않았다. 하지만 자주 쓰이니 눈에 익혀두자.
bdigit = to_string(n % 2) + bdigit;
n /= 2;
}
return cnt;
}
int solution(int n) {
int answer = 0;
int x = BinaryCount(n);//n일 때 1의 개수
//n을 1씩 증가시키면서 이진수 변환
while(n++)
{
//변환한 이진수의 1의 개수 = n일 때 1의 개수면 break 종료
if (BinaryCount(n) == x)
break;
}
answer = n;//answer에 갱신된 n값을 넣어준다.
return answer;
}
int main() {
cout << solution(78);
return 0;
}
인터넷에서 찾은 간단한 풀이
#include <bitset>
using namespace std;
int solution(int n)
{
//현재 주어진 정수 n의 이진수 빈도에서 1의 개수를 찾는다.
int num = bitset<20>(n).count();
//n을 증가하면서 해당 조건에 부합하는 수를 찾을 때까지 반복
//조건: 이진수의 1의 개수가 처음 n의 1의 개수와 같아야 한다.
while (bitset<20>(++n).count() != num);
return n;
}
Bitset 참고 링크
https://notepad96.tistory.com/35
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 카펫 (0) | 2023.08.22 |
---|---|
[프로그래머스 C++] 짝지어 제거하기 (0) | 2023.08.21 |
[프로그래머스 C++] 숫자의 표현 (0) | 2023.08.12 |
[프로그래머스] 이진 변환 반복하기 (0) | 2023.07.30 |
[프로그래머스] 최솟값 만들기 (0) | 2023.07.29 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 카펫
[프로그래머스 C++] 카펫
2023.08.22 -
[프로그래머스 C++] 짝지어 제거하기
[프로그래머스 C++] 짝지어 제거하기
2023.08.21 -
[프로그래머스 C++] 숫자의 표현
[프로그래머스 C++] 숫자의 표현
2023.08.12 -
[프로그래머스] 이진 변환 반복하기
[프로그래머스] 이진 변환 반복하기
2023.07.30