프로그래머스의 다음 큰 숫자(Lv2) 문제이다.
[ 문제풀이 ]
주어진 숫자 N의 다음 큰 숫자를 구해야 하는데, 다음 큰 숫자 라는 것은 2진수로 변환했을 때, N과 '1'의 갯수가 동일하면서
가장 작은 숫자이다.
본인은, N + 1부터 조건을 만족하는 "다음 큰 숫자"가 나올 때 까지 반복하는 방식으로 구현하였다.
핵심은 '1'의 갯수를 파악하는 것인데, 이 부분은 & 연산과 비트 이동을 이용해서 구현하였다.
1 2 3 4 5 6 7 8 9 10 11 | int Count(int N) { int Cnt = 0; int Bit = 1; while (N > 0) { if (N & Bit == 1)Cnt++; N = N >> 1; } return Cnt; } | cs |
본인이 구현한 2진수로 변환했을 때, '1'의 갯수를 카운트 하는 함수이다.
'1'과 주어진 숫자 N을 한 비트씩 & 연산을 통해서 1의 갯수를 Count 해주는 방식으로 구현하였다.
[ 소스코드 ]
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 | #include<string> #include<vector> using namespace std; int Count(int N) { int Cnt = 0; int Bit = 1; while (N > 0) { if (N & Bit == 1)Cnt++; N = N >> 1; } return Cnt; } int solution(int n) { int Cnt = Count(n); int Next = n + 1; while (1) { int Cnt2 = Count(Next); if (Cnt == Cnt2) return Next; Next++; } } | cs |
'[ Programmers Code ] > # PG - Level2' 카테고리의 다른 글
[ 프로그래머스 튜플 (Lv2) ] (C++) (0) | 2020.04.24 |
---|---|
[ 프로그래머스 숫자의 표현 (Lv2) ] (C++) (0) | 2020.04.21 |
[ 프로그래머스 올바른 괄호 (Lv2) ] (C++) (0) | 2020.04.19 |
[ 프로그래머스 위장 (Lv2) ] (C++) (0) | 2020.03.05 |
[ 프로그래머스 소수 찾기 (Lv2) ] (C++) (3) | 2020.02.18 |