처음 풀이식
public int solution(int n) {
int answer = 0;
/*
* 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
*/
String n2 = Integer.toBinaryString(n);
n2 = n2.replaceAll("0", "");
int cnt = 1;
while(true) {
answer = n + cnt++;
String num2 = Integer.toBinaryString(answer);
num2 = num2.replaceAll("0", "");
if(n2.length() == num2.length()) {
break;
}
}
return answer;
}
코드는 문제없이 통과헀으나 효율성에 걸렸다.
왜 걸렸을까?
정답은 Java 함수 중 BitCount 라는 함수에 있었다....
복잡하게 이진수로 변환시켜 0을 없애고 그 길이를 세는 방법이 아니라 그냥 처음부터 1의 갯수만 뽑아내는 함수가 있었다 ㅋㅋ;
public int solution(int n) {
int answer = 0;
/*
* 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
*/
int nBitCnt = Integer.bitCount(n);
int cnt = 1;
while(true) {
answer = n + cnt++;
int answerBitCnt = Integer.bitCount(answer);
if(nBitCnt == answerBitCnt) break;
}
return answer;
}
깔끔하게 단 몇 줄로 코드가 완성..
'프로그래밍 > 알고리즘 (JAVA)' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL0 분수의 덧셈 / 최대공약수 활용 | 정답률 33.3% 나오는 경우 필독 (0) | 2023.03.23 |
---|---|
[JAVA] 프로그래머스 LEVEL2 멀리 뛰기 / 피보나치수열 활용 (0) | 2023.03.22 |
[JAVA] 프로그래머스 LEVEL2 피보나치 수 (0) | 2022.10.05 |
[JAVA] 프로그래머스 LEVEL2 숫자의 표현 (1) | 2022.10.05 |
[JAVA] 백준 알고리즘 9012번 - 괄호 (Stack 활용) (0) | 2021.10.20 |