다음 큰 숫자

이리·7일 전
0
post-thumbnail

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

문제설명

  • 주어진 파라미터: int n
  • 반환값: int
  • 자연수 n이 주어졌을때 n의 다음 큰 숫자
    • n의 다음 큰 숫자는 n보다 큰 자연수
    • n의 다음 큰 숫자와 n은 2진수로 변환했을때 1의 개수가 같다. →
    • n의 다음 큰 숫자는 위의 조건을 만족하는 수 중 가장 작은 수

풀이방식

  1. 2진수 변환시 1이 증가하는 규칙 찾기
    • 최대 차이가 2배 이하라서 하나씩 추가해보면서 1의 개수를 비교해도 상관없을듯
  2. 이진수 변환해서 1의 개수를 구하는 메소드 추가
  3. 1의 개수와 같을 경우 return

코드

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        int point = calc(n);
        n = n + 1;
        
        while(calc(n) != point){
            if(calc(n) == point){
                return n;
            }
            n += 1;
        }
        
        return n;
    }
    
    // num이 들어오면 해당 수의 이진수 변환시 1의 개수를 return 
    public int calc(int num){
        int cnt = 0;
        String num1 = Integer.toBinaryString(num);
        
        for(char c : num1.toCharArray()){
            if(c == '1'){
                cnt++;
            }
        }
        
        return cnt;
    }
}

회고

다소 코드가 긴 것 같아 다른 사람의 코드를 살펴보았다.

bitCount(n) : 이진수 중에서 true bit의 개수를 찾는 함수

라는게 있어 나중에 유용하게 쓰일 것 같다!


참 쉽쥬잉~?

0개의 댓글