코딩테스트/Programmers

[JAVA] 다음 큰 숫자

hxx_1 2024. 4. 22. 20:47

< 풀이 >

class Solution {
    static String binary;
    static int count_1;
    
    static int count_1(int num){
        binary=Integer.toBinaryString(num);
        binary=binary.replace("0",""); //0을 제거하기
        
        count_1=binary.length(); //1만 남았으므로 1의 개수==문자열의 길이
        
        return count_1; // 개수 반환 
    }
    public int solution(int n) {
        int answer = 0;
        
        int num=count_1(n); // n의 1의 개수 세기
        for(int i=n+1;i<=1000000;i++){ // n보다 큰 수이므로 n+1부터 시작
            if(count_1(i)==num){ // i의 1의 개수가 n의 1의 개수와 같으면
                answer=i;
                break;
            }
        }
        return answer;
    }
}

 

✏️ 풀이 과정

 

- count_1 함수

  1. 매개변수로 들어온 num을 이진수로 변환한다. 

  2. 0을 제거한다. -> 1만 남음

  3. 문자열의 길이 (1의 개수) 를 반환한다.

- main

: n의 1의 개수를 세고, n+1부터 10만까지 반복문을 돌아 n의 1의 개수와 같은 자연수를 찾는다. 

 

✍🏻 느낀점

 

처음에 binary 변수와 count_1 변수를 전역변수로 선언하지 않고, 함수의 지역변수로 선언했을 때, 런타임 에러가 났다.

구글에 찾아보니, 함수는 계속 호출되고 변수가 계속 생성되어서 그런 것 같았다. 이번 문제를 통해 변수를 어떻게 선언했는지에

따라서도 에러가 날 수 있다는 걸 처음 알게 되었다. 이번 문제를 통해 저번에 배웠던 toBinaryString 함수와 replace 함수를 복습해서 좋았다.