코딩테스트/Programmers
[JAVA] 다음 큰 숫자
hxx_1
2024. 4. 22. 20:47
< 풀이 >
class Solution {
static String binary;
static int count_1;
static int count_1(int num){
binary=Integer.toBinaryString(num);
binary=binary.replace("0",""); //0을 제거하기
count_1=binary.length(); //1만 남았으므로 1의 개수==문자열의 길이
return count_1; // 개수 반환
}
public int solution(int n) {
int answer = 0;
int num=count_1(n); // n의 1의 개수 세기
for(int i=n+1;i<=1000000;i++){ // n보다 큰 수이므로 n+1부터 시작
if(count_1(i)==num){ // i의 1의 개수가 n의 1의 개수와 같으면
answer=i;
break;
}
}
return answer;
}
}
✏️ 풀이 과정
- count_1 함수
1. 매개변수로 들어온 num을 이진수로 변환한다.
2. 0을 제거한다. -> 1만 남음
3. 문자열의 길이 (1의 개수) 를 반환한다.
- main
: n의 1의 개수를 세고, n+1부터 10만까지 반복문을 돌아 n의 1의 개수와 같은 자연수를 찾는다.
✍🏻 느낀점
처음에 binary 변수와 count_1 변수를 전역변수로 선언하지 않고, 함수의 지역변수로 선언했을 때, 런타임 에러가 났다.
구글에 찾아보니, 함수는 계속 호출되고 변수가 계속 생성되어서 그런 것 같았다. 이번 문제를 통해 변수를 어떻게 선언했는지에
따라서도 에러가 날 수 있다는 걸 처음 알게 되었다. 이번 문제를 통해 저번에 배웠던 toBinaryString 함수와 replace 함수를 복습해서 좋았다.