자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
n | result |
---|---|
78(1001110) | 83(1010011) |
15(1111) | 23(10111) |
JavaScript
function solution(n) {
var answer = 0;
let bin_n = n.toString(2);
let one_count = bin_n.split('1').length - 1
let next = n+1;
let bin_next = next.toString(2);
if (bin_n.includes('0')) {
while (bin_next.split('1').length - 1 != one_count) {
next += 1
bin_next= next.toString(2)
}
} else {
bin_next = '10' + bin_n.substring(1);
}
return parseInt(bin_next, 2);
}
String.includes([특정 문자열])
로 특정 문자열 포함 여부 검사String.split('[특정 문자]').length - 1
parseInt([문자열], [진수])
의 두 번째 매개변수로 해당 문자열이 어떤 진수로 표기되어있는지 기술Python
def solution(n):
bin_n = str(format(n, 'b'))
one_count = bin_n.count('1')
next = n + 1
bin_next = str(format(next, 'b'))
if '0' in bin_n:
while (bin_next.count('1') != one_count):
next += 1
bin_next = str(format(next, 'b'))
else:
bin_next = '10' + bin_n[1:]
return int(bin_next, 2)
str(format([수], 'b'))
string.count('[특정 문자]')
in
연산자int([2진수 문자열], 2)
통해 2진수 문자열 정수로 변환