[프로그래머스] 다음 큰 숫자

kiki·2024년 1월 1일
0

프로그래머스

목록 보기
27/78

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12911

문제 설명

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

n이 주어졌을 때 n의 다음 큰 숫자를 반환하라.

1차 시도

def solution(n):
    tmp = n
    while(1):
        tmp+=1
        if str(bin(n)).count('1') == str(bin(tmp)).count('1'):
            return tmp

bin 함수가 있는 건 알았지만 반환 타입을 까먹음. str타입으로, '0b101110'과 같이 반환됨.
그리고 while문 안에서 같은 결과값을 갖는 bin(n).count('1') 연산을 반복적으로 할 필요가 없음.

2차 시도

def solution(n):
    cnt = bin(n).count('1')
    while(1):
        n+=1
        if cnt == bin(n).count('1'):
            return n

bin이 string으로 반환되기때문에 str()으로 감싸줄 필요 없음
그리고 bin(n).count('1')을 반복문 바깥으로 빼 불필요한 연산 줄이기

정리

  • bin(): 10진수를 2진수 문자열로 변환하는 함수. '0b11011000'과 같이 반환됨
  • 효율적인 코드: 같은 결과값을 내는 연산은 반복문 바깥으로 빼준다.

0개의 댓글