본문 바로가기

Algorithm

[프로그래머스] 다음 큰 숫자(Python, Java)

반응형

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

 

코딩테스트 연습 - 다음 큰 숫자

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

programmers.co.kr

문제 설명

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

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

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

제한 사항

  • n은 1,000,000 이하의 자연수 입니다.

입출력 예

n result
78 83
15 23

입출력 예 설명

입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.

풀이 설명

1. n을 이진수로 변환한 수의 1의 값을 구한다.

   (파이썬) format 함수를 사용하여 이진수로 변환한 후, binary.count('1')를 사용하여 1의 개수를 구한다.

   (자바) Integer.bitCount라는 좋은 함수가 있어 이진수일때 1의 값을 바로 구할 수 있다.

2. 무한반복문

  2-1. n을 1씩 올리면서 이진수일때 1의 값이 같은 수를 구한다.

Python3 코드

def solution(n):
    binary = format(n, 'b')
    count = binary.count('1')
    while True:
        n += 1
        if count == format(n, 'b').count('1'):
            return n

Java 코드

class Solution {
    public int solution(int n) {
        int count = Integer.bitCount(n);
        while(true){
            n++;
            if(count == Integer.bitCount(n))
                break;
        }
        return n;
    }
}
반응형