일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BFS
- c++
- TensorFlow
- 프로그래머스
- python3
- 백준
- 스프링
- stl
- 인코더
- c
- 연결리스트
- 블로그개설
- DP
- spring
- 스프링 프레임워크
- hackerrank
- Rebase
- 백트래킹
- 스프링프레임워크
- ADAS
- Map
- vue.js
- 머신러닝
- 프로그래밍
- git
- Android
- 카카오인코더
- Kotlin
- 안드로이드
- retrofit
Archives
- Today
- Total
이것저것 공부한 기록
C++) 프로그래머스 문제 풀이_다음 큰 숫자 본문
조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. |
첨엔 규칙을 찾아보려고 발버둥을 쳤는데..
....
그저 n+1부터 N과 1 갯수가 같은 수가 나올 때 까지 전부 탐색하면 되는 문제였다.
다만 탐색하는 방법을 좀 더 효율적으로 할 수 있을 것 같은데, 그게 영 안돼 ㅠ ;
범위라도 줄여서 구현했다.
원래는 n+1이라도 제외할까 했는데, 생각해보니 1의 다음 큰 숫자는 2라서 걍 패스.
하나 덜 본다고 줄일 수 있을 리도 없고.
#include <string>
#include <vector>
using namespace std;
int main() {
int answer = 0;
int input ;
scanf("%d", &input);
int size_1_inp = 0;
int size_binary = 0;
int inp = input;
for (int i = 0; i < 30; ++i)
{
if (inp % 2 == 1) size_1_inp++;
inp = inp / 2;
if (inp == 0)
{
size_binary = i;
break;
}
}
int max_value = 1;
for (int i = 0; i < size_binary; ++i)
{
max_value *= 2;
}
for (int i = input+1; i <= input + max_value; ++i)
{
int outp = i;
int size_1_out = 0;
for (int j = 0; j < 30; ++j)
{
if (outp % 2 == 1) size_1_out++;
outp = outp / 2;
if (outp == 0) break;
}
if (size_1_inp == size_1_out)
{
answer = i;
break;
}
}
printf("%d", answer);
}
'Study > 프로그래밍 문제풀이' 카테고리의 다른 글
C++) HackerRank 풀이_Alternating Characters (0) | 2019.10.25 |
---|---|
C++) HackerRank 풀이_Hash Tables : Ransom Note (0) | 2019.10.25 |
C++) 프로그래머스 문제 풀이_콜라스 추측 (0) | 2019.10.24 |
C++) 백준 2011번 풀이_암호코드 (0) | 2019.10.23 |
C++) 백준 2133번 풀이_타일 채우기 (0) | 2019.10.23 |