반응형
안녕하세요 BlockDMask 입니다.
새로운 알고리즘 문제 사이트를 발견해서
문제를 풀어봤습니다.
0. 문제
Programmers Level3 nextBigNumber
Programmers Level3 다음 큰 숫자
1. 문제설명
(1 <= N <= 1,000,000)일때
N의 다음 큰 숫자를 구하라.
다음 큰 숫자란.
1) N을 2진수로 바꾸었을때 1의 갯수가 같은 숫자를 말한다.
2) 1번 조건을 만족한 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 말한다.
2. 풀이과정
1번 조건을 위해서 getCount 함수를 만들었습니다.
getCount 함수는 파라미터로 전달받은 정수를 2진수로 바꾸었을때 1의 갯수를 반환하는 함수입니다.
n보다 큰 값을 하나씩 getCount에 넣으면서 1의 갯수를 비교합니다.
n의 2진수에서 1의 갯수와 동일한 갯수를 가진 숫자가 나오면
결과를 출력합니다.
3. 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include<iostream> using namespace std; //2진수로 바꾸었을때 1의 갯수를 반환하는 함수 int getCount(int n){ int count =0; for(int i=n; i>0; i--){ if(n%2 == 1){ count++; } n = n/2; } return count; } //다음 큰 숫자를 반환하는 함수. int nextBigNumber(int n) { int answer; int cnt1 = getCount(n); int cnt2; while(1){ cnt2 = getCount(++n); if(cnt1 == cnt2){ answer = n; break; } } return answer; } int main(){ int n=78; //아래는 테스트 출력을 위한 코드입니다. cout<<nextBigNumber(n); } | cs |
4. 인증
<문제출처>
https://programmers.co.kr/learn/challenge_codes/170
감사합니다. 도움이 되셨다면 하트 한번 꾹 눌러주세요!
반응형
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[백준 2675] 문자열 반복 (0) | 2017.09.17 |
---|---|
[Level 4] 숫자의 표현 (0) | 2017.09.15 |
[Level 3] 멀리 뛰기 (jumpCase) (0) | 2017.09.14 |
[Level 3] 시저 암호 (caesar) (0) | 2017.09.14 |
[백준 1912] 연속합 (수열) (0) | 2017.09.12 |
[백준 11004] K번째 수 (0) | 2017.09.08 |
[백준 10845] 큐 (C, C++ Queue) (6) | 2017.08.21 |
[백준 2747] 피보나치 수 (2) | 2017.08.17 |