본문 바로가기
코딩테스트 연습

다음 큰 숫자(Java) - 프로그래머스 코딩테스트 연습

by 밝지 2023. 3. 12.
728x90
반응형

 

 

 

class Solution {
	public int solution(int n) {
    	int answer = n+1;	//정답은 n보다 큰 자연수. n이 될 수 있는 가장 작은 수는 n+1
        int nBitCnt = Integer.bitCount(n);	//숫자를 이진수화 했을 때 비트 개수를 리턴하는 함수
        
        while(true) {
        	if(Integer.bitCount(answer) == nBitCnt) {
            	break;	// 주어진 숫자와 비트카운트가 같은 n보다 큰 가장 작은 자연수
            }
            answer++;	// 비트카운트가 다르면 숫자를 1씩 올림
        }
        
    	return answer;
    }
}

 

Integer.bitCount(int n)

사실상 Integer.bitCount(int n)만 알면 쉽게 풀수 있는 문제. 하지만 난 몰랐어서 삽질하다가 다른 사람 풀이 보고 알았다. 무슨 삽질을 했냐면.. 주어진 수를 이진수로 바꾸고.. 그 이진수에서 1의 위치를 찾아서.. 그 위치를 가지고 어떻게 해보려고함. 어떻게 이렇게 어렵게 생각했지???? 코딩테스트의 핵심을 문제를 쉽게 바꾸는 것인듯...

 

  • 숫자 n보다 큰 자연수 -> n+1부터 시작하는 answer
  • 2진수로 변환했을 때 1의 개수가 같음 -> Integer.bitCount(n) == Integer.bitCount(answer)
  • 가장 작은 수라고 했으니 1씩 늘려가고, 같으면 바로 그것이 답!

 

주어진 조건만 정리해도 바로 답이 나오는데... 쉽게 생각하자 쉽게!

 

Integer.bitCount(int n)

정수를 매개변수로 넣었을 때 그 정수를 이진수로 만들었을 때의 1의 개수를 반환한다.

예) Integer.bitCount(7) = 3 

728x90
반응형