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

다곰·2022년 10월 19일
0

우당탕탕 코테준비

목록 보기
9/98

✅ LV. 2

✏️ 솔루션

  1. 이진수 계산시 1 로 변환될 때마다 count해주기
  2. 반복문을 돌면서 n 다음 수 중 1의 개수가 n 과 동일할 경우 return

✏️ 최종 코드

using namespace std;
int cnt;
void f(int n) {
    if(n>1) f(n/2);
    if(n%2==1) cnt++;
}

int solution(int n) {
    int answer = 0;
    cnt=0;
    f(n);
    int c=cnt;
    while(1) {
        cnt=0;
        n++;
        f(n);
        if(cnt==c) return n;
    }
    
    return answer;
}

✏️ 개선 사항

  • 함수를 쓰다보니 비효율적..이번에도 조마조마했다!
  • 이진변환시 사용자 정의 함수 대신 bitset 함수 사용해 변환하기
  • 먼저 n 을 이진변환해 count1 의 개수를 저장하고 저장한 개수와 n 다음의 수들의 1 의 개수가 동일할 때까지 반복하기

🔗 [C++] count 함수

🔗 [C++] bitset 라이브러리

✏️ 개선 코드

#include <bitset>

using namespace std;

int solution(int n) {
    int num = bitset<20>(n).count();

    while (bitset<20>(++n).count() != num);
    return n;
}
profile
다교미의 불꽃 에러 정복기

0개의 댓글