230325 TIL - 프로그래머스 12911

thumbzzero·2023년 3월 25일
0

TIL

목록 보기
17/21

12911

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

nresult
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);
}
  • n을 2진수로 표기했을 때 1밖에 없다면 자릿수가 하나 더 늘어나야 하고, 0이 있으면 자릿수가 그대로이므로 case 구분
  • 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)
  • 특정 숫자 2진수 문자열로 만드려면 str(format([수], 'b'))
  • 문자열에서 특정 문자의 개수 구하려면 string.count('[특정 문자]')
  • 특정 문자 포함 여부 검사 in 연산자
  • int([2진수 문자열], 2) 통해 2진수 문자열 정수로 변환

0개의 댓글