https://programmers.co.kr/learn/courses/30/lessons/12911
[ 문제 설명 ]
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
[ 제한 사항 ]
[ 입출력 예시 ]
n | result |
---|---|
78 | 83 |
15 | 23 |
- 1의 개수를 세어줄 메서드(one_cnt)를 만들어서 1의 개수를 세어줄 변수(one)을 0으로 초기화한다.
- 입력 받은 n의 값을 toBinaryString(n)을 이용하여 이진수 문자열로 만들어주고 toCharArray()를 이용하여 한 문자씩 나누어준다.
- 문자를 하나씩 검사하면서 문자가 1이라면 1을 세어줄 변수(one)을 증가(++)시키고 최종으로 나온 one을 반환한다.
- solution메서드에서 입력받은 1의 개수를 담아줄 변수(n_one)를 one_cnt 메서드를 이용하여 주어진 값의 1의 개수를 받아준다.
- while문으로 n을 하나씩 증가시키면서 1의 개수가 같은 값이 나올 때까지 n을 증가시키고 같아지는 수의 값을 answer에 담아 break;로 while문을 빠져나와 answer을 반환하여준다.
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;
}
}