메모리: 52.1 MB, 시간: 0.02 ms
코딩테스트 연습 > 연습문제
정확성: 70.0
효율성: 30.0
합계: 100.0 / 100.0
2024년 1월 5일 19:46:40
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
n | result |
---|---|
78 | 83 |
15 | 23 |
입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.
class Solution {
public int solution(int n) {
String before = func(n); // 2진수 변경
int before_count = 0;
for(int i = 0 ; i < before.length() ; i++){
if(before.charAt(i) == '1') before_count++;
}
int answer = -1;
while(true){
n++;
String after = func(n);
int after_count = 0;
for(int i = 0 ; i < after.length() ; i++){
if(after.charAt(i) == '1') after_count++;
if(before_count < after_count) break;
}
if(before_count == after_count){
answer = n;
break;
}
}
return answer;
}
// 수(int) => 이진수(string)
public static String func(int number){
StringBuilder sb = new StringBuilder();
while(number > 0){
sb.append(number % 2);
number /= 2;
}
return sb.reverse().toString();
}
}
class Solution {
public int solution(int n) {
int before_count = func(n); // 1개수
int answer = -1;
while(true){
n++;
int after_count = func(n);
if(before_count == after_count){
answer = n;
break;
}
}
return answer;
}
// 수(int) => 이진수(string) + 1개수 세버려
public static int func(int number){
int count = 0;
while(number > 0){
count += number % 2;
number /= 2;
}
return count;
}
}