[ Programmers ] 다음 큰 숫자 (Java)

ma.caron_g·2021년 12월 18일
0

Lv.2 - Programmers

목록 보기
12/14
post-thumbnail

1. Problem 📃

[ 다음 큰 숫자 ]

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


[ 문제 설명 ]

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

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

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

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


2. Constraint 🔗

[ 제한 사항 ]

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

3. Example 📚

[ 입출력 예시 ]

nresult
7883
1523

4. Solution 🔑

  1. 1의 개수를 세어줄 메서드(one_cnt)를 만들어서 1의 개수를 세어줄 변수(one)을 0으로 초기화한다.

  2. 입력 받은 n의 값을 toBinaryString(n)을 이용하여 이진수 문자열로 만들어주고 toCharArray()를 이용하여 한 문자씩 나누어준다.

  3. 문자를 하나씩 검사하면서 문자가 1이라면 1을 세어줄 변수(one)을 증가(++)시키고 최종으로 나온 one을 반환한다.

  4. solution메서드에서 입력받은 1의 개수를 담아줄 변수(n_one)를 one_cnt 메서드를 이용하여 주어진 값의 1의 개수를 받아준다.

  5. while문으로 n을 하나씩 증가시키면서 1의 개수가 같은 값이 나올 때까지 n을 증가시키고 같아지는 수의 값을 answer에 담아 break;로 while문을 빠져나와 answer을 반환하여준다.

5. Code 💻

class Solution {
	public int one_cnt(int n) {
		int one = 0;
		String temp = Integer.toBinaryString(n);
		for(char c : temp.toCharArray()) {
        	if(c == '1') {
        		one++;
        	}
        }
		return one;
	}
    public int solution(int n) {
        int answer = 0;
        int n_one = one_cnt(n);
        while(true) {
        	++n;
        	if(n_one == one_cnt(n)) {
        		answer = n;
        		break;
        	}
        }
        return answer;
    }
}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글