다음 큰 숫자
📒 문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12911
💻 언어
C++
풀이
- 처음에 n을 2진수로 변환하여 1의 갯수를 파악한다 (함수 선언)
n+1부터 시작하여 수를 늘려간다.이 때, n을 함수에 대입한 값과 같아질 때까지 늘려간다.
- 구한 값을
return한다.
관련 알고리즘
-
사고 과정
📌 특정 숫자를 2진수로 변환
- 특정 입력값을 2진수로 변환한다.
- 이 때,
나누기와나머지연산을 활용한다.- 나머지가 1일 때, 1의 갯수를 카운팅한다.
- 1이 남을 때까지 연산은 지속되며, 연산 종료 후 카운팅한 값을
return한다.
📌 n+1부터 1의 갯수 파악
- n+1부터 1의 갯수를 파악한다.
- 함수로 만들어놓았으므로 if 조건문내에서
++연산을 활용해 효율적으로 작성한다.
- 함수로 만들어놓았으므로 if 조건문내에서
- 1의 갯수가 같다면 그 값을
return한다.
결과
#include <string>
#include <vector>
using namespace std;
// 0. 2진수로 변환하여 1의 갯수를 파악하는 함수를 만든다.
int func(int n) {
int count = 0;
do {
if (n % 2 != 0)
count++;
n /= 2;
} while(n >= 1);
return count;
}
int solution(int n) {
// 1. n의 1의 갯수를 파악한다.
int correct = func(n);
// 2. n+1부터 시작하여 수를 늘려간다.
// 이 때, 1번에서 계산했던 갯수가 같아질 때까지 늘려간다.
while(true) {
if (correct == func(++n)) {
// 3. 2번 과정에서 구한 값을 return
return n;
}
}
}