문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12911
레벨 : Level 2
분류 : 연습문제
 

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

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

programmers.co.kr

이 문제는 2진수의 1의 개수를 구하는 것이 핵심이다.

소스를 보면 getBinarycountOne이라는 2진수에서 1을 구하는 함수를 만들어서 해결했으나 다른 사람들의 풀이를 보면서 복습하다가 Integer에 bitCount 함수를 알게 되었다. 

bitCount함수가 1의 개수를 카운팅 해주어 커스텀 함수를 만들 필요가 없게 되었다.

 

아래와 같이 풀이를 공유합니다.

import java.util.*;

class Solution {
    public int solution(int n) {
        int nc = Integer.bitCount(n);
        
        while(true) {
            if(nc == Integer.bitCount(++n)) break;
        }
        
        return n;
	}
    
    public int getBinaryCountOne(int n) {
        int cnt = 0;
        while(n > 0) {
            int o = n % 2;
            n /= 2;
            if(o == 1) cnt++;
        }
        
        return cnt;
    }
}

+ Recent posts