[JAVA] 프로그래머스 (Lv.2) 다음 큰 숫자

AIR·2023년 9월 7일
0

링크

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


문제 설명

(정답률 73%)
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

  • 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
  • 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
  • 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
    예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

  • n은 1,000,000 이하의 자연수 입니다.

입출력 예제

nresult
7883
1523

나의 코드

class Solution {
    public int solution(int n) {
        int answer = n;
        boolean isAnswer = false;

        while (!isAnswer) {
            if (oneCount(Integer.toBinaryString(n)) == oneCount(Integer.toBinaryString(++answer))) {
                isAnswer = true;
            }
        }

        return answer;
    }

    public int oneCount(String s) {
        int cnt = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '1') {
                cnt++;
            }
        }

        return cnt;
    }
}

다른 사람의 풀이

import java.lang.Integer;
class TryHelloWorld
{
    public int nextBigNumber(int n)
    {
      int a = Integer.bitCount(n);
      int compare = n+1;
      while(true) {
        if(Integer.bitCount(compare)==a)
          break;
        compare++;
      }
      return compare;
    }
    public static void main(String[] args)
    {
        TryHelloWorld test = new TryHelloWorld();
        int n = 78;
        System.out.println(test.nextBigNumber(n));
    }
}

정리

푸는데 5분도 안걸린 문제인거 같다..
그래서 딱히 정리를 안하려고 했으나
다른 사람의 풀이를 보다가 좋은 메서드가 있어서 정리하려고 한다.
나는 이진수의 1의 개수를 세려고 메서드를 따로 만들었으나
이미 Integer클래스에 해당 메서드가 있었다.
bitCount(int 값)를 이용하면 따로 2진수로 변환할 필요없이
바로 1(true bit)의 개수를 계산해준다.
속도도 엄청 빠르다.

profile
백엔드

0개의 댓글