본문 바로가기

Algorithm/level2

[ 프로그래머스 - Java & Kotlin ] 다음 큰 숫자 ( 자바 & 코틀린 )

728x90

( 연습문제 / 다음 큰 숫자 )

[문제]

문제 설명

자연수 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)입니다.


[풀이]

자연수 n을 toBinaryString()으로 문자열 이진수로 변환합니다. 그다음 replace() 함수를 통해 "0"을 모두 제거 후 length()로 문자열의 길이를 출력하면 해당 값이 1의 개수가 됩니다.

1의 개수를 구했다면 이제 조건에 맞는 숫자를 n에 1씩 더하면서 위의 과정을 반복하면 됩니다.


[코드]

자바

class Solution {
    public int solution(int n) {
        // n의 2진수에서 1의 개수 구하기
        int cnt = Integer.toBinaryString(n).replace("0", "").length();
        while(true){
            // n을 증가시키면서 처음의 1의 개수와 같으면 반복문 종료
            if(Integer.toBinaryString(++n).replace("0", "").length() == cnt) break;
        }
        
        return n;
    }
}

코틀린

fun solution(n:Int):Int{
    // n의 2진수에서 1의 개수 구하기
    val cnt = n.toString(2).replace("0", "").length
    var num = n
    while(true){
        // n을 증가시키면서 처음의 1의 개수와 같으면 반복문 종료
        if((++num).toString(2).replace("0", "").length == cnt) break
    }
    return num
}

문제 링크

 

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

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

programmers.co.kr

제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻‍💻

감사합니다~😄

 
728x90