알고리즘/PS - 프로그래머스

[프로그래머스 - Java] 다음 큰 숫자

excited-hyun 2021. 8. 26. 17:48
반응형

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

 

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

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

programmers.co.kr

 

풀이

 

이 문제는 그냥 1씩 증가시키면서 확인하는 방식으로 풀어도 효율성을 통과합니다.

  1. n을 2진수로 변환한 후 1의 개수를 세줍니다.
  2. n+1부터 1씩 증가시키면서 2진수 변환 시의 1의 개수를 세고 이것이 n의 것과 같아지는 경우를 찾을 때까지 반복합니다.

좀 더 복잡한 방법으로 푸는 방식도 있다고 하는데 저는 안해봤습니다ㅎㅎ

 

class Solution {
    public int solution(int n) {
        int answer = 0;
        //n을 2진수 변환시 1이 몇개 인지
        int cnt = countOne(n);
        int num = n+1;
        //n+1부터 확인하면서 찾기
        while(true){
            int check = countOne(num);
            if(check == cnt){
                answer =  num;
                break;
            }
            num++;
        }
        return answer;
    }
    
    //2진수 변환 시 1이 몇개 있는지 세주는 함수
    int countOne(int num){
        int cnt = 0;
        
        while(num > 0){
            if(num%2 == 1)
                cnt++;
            num = num / 2;
        }
        return cnt;
    }
}

 

728x90
반응형