반응형
문제는 다음과 같습니다.
https://programmers.co.kr/learn/courses/30/lessons/12911
코딩테스트 연습 - 다음 큰 숫자
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니
programmers.co.kr
풀이 코드는 다음과 같습니다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string TenToBinary(int n)
{
string s="";
while(n>0){
int remain = n%2;
n/=2;
s = to_string(remain)+s;
}
return s;
}
int counting(string &s){
int a=0;
for(int i{0};i<s.length();i++){
if(s[i]=='1')
a++;
}
return a;
}
int solution(int n) {
int answer {0};
string s = TenToBinary(n);
int s_one = counting(s);
int tmp{n+1};
while(true){
string binary = TenToBinary(tmp);
if(s_one==counting(binary)){
answer=tmp;
break;
}
tmp++;
}
return answer;
}
문제를 풀기 위해 함수를 2개 더 만들었는데 하나는 10진수의 수를 2진수로 바꾸어주는 함수이고 하나는 그 2진수의 수에 1의 개수가 얼마나 있는지 카운트하는 함수입니다.
1의 개수를 세기 위해 2진수의 경우에는 문자열로 받아 풀었습니다.
문제의 조건에 맞는 "다음 큰 숫자"를 확인하는 방법은 입력받은 수를 2진수로 바꾸고 1의 개수를 확인한 다음 이후 1씩 증가시켜 그 수의 2진수의 1의 개수가 같을 때 까지 계속 진행하는 방법입니다.
반응형
'프로그래머스 Lv.2 코딩테스트' 카테고리의 다른 글
[프로그래머스 Lv.2] 최댓값과 최솟값 (0) | 2022.09.08 |
---|---|
[프로그래머스 Lv.2] 행렬의 곱셈 (0) | 2022.06.23 |
[프로그래머스 Lv.2] JadenCase 문자열 만들기 (0) | 2022.03.04 |
[프로그래머스 Lv.2] 피보나치 수 (0) | 2022.02.16 |
[프로그래머스 Lv.2] 최솟값 만들기 (0) | 2022.02.16 |